Questions tagged «angularjs-scope»

在AngularJS中,范围是指引用应用程序模型的对象。它是表达式的执行上下文。


6
如何在AngularJS中使用$ scope。$ watch和$ scope。$ apply?
我不知道如何使用$scope.$watch和$scope.$apply。官方文档没有帮助。 我不明白的是: 他们连接到DOM吗? 如何更新对模型的DOM更改? 它们之间的连接点是什么? 我尝试了本教程,但是它理解了$watch并且$apply是理所当然的。 做什么$apply和$watch做什么,以及如何正确使用它们?

18
AngularJS指令范围中的'@'和'='有什么区别?
我已经仔细阅读了有关该主题的AngularJS文档,然后摆弄了一条指令。这是小提琴。 以下是一些相关的摘要: 从HTML: <pane bi-title="title" title="{{title}}">{{text}}</pane> 从窗格指令: scope: { biTitle: '=', title: '@', bar: '=' }, 有几件事我没有得到: 为什么必须"{{title}}"与'@'和"title"一起使用'='? 我是否还可以直接访问父范围,而不用属性装饰元素? 该文档说:“通常希望通过表达式将数据从隔离的范围传递到父范围”,但这似乎也可以与双向绑定一起使用。为什么表达途径会更好? 我发现了另一个小提琴,它也显示了表达式解决方案:http : //jsfiddle.net/maxisam/QrCXh/

7
AngularJS控制器中的'this'与$ scope
在AngularJS主页的“创建组件”部分中,有以下示例: controller: function($scope, $element) { var panes = $scope.panes = []; $scope.select = function(pane) { angular.forEach(panes, function(pane) { pane.selected = false; }); pane.selected = true; } this.addPane = function(pane) { if (panes.length == 0) $scope.select(pane); panes.push(pane); } } 请注意,该select方法是如何添加到的$scope,但是该addPane方法是添加到的this。如果将其更改为$scope.addPane,代码将中断。 该文档说实际上存在区别,但是没有提到区别是什么: 以前的Angular版本(1.0 RC之前的版本)允许您this与该$scope方法互换使用,但情况不再如此。在作用域上定义的方法内部this并且$scope可以互换(将设置this为$scope),但在控制器构造函数中则不能如此。 如何this和$scope在AngularJS控制器的工作?

28
AngularJS:调用$ scope。$ apply()时防止错误$ digest已经在进行中
我发现自从以角度构建应用程序以来,我需要越来越多地手动将页面更新到我的范围。 我唯一知道的方法是$apply()从控制器和指令的范围进行调用。问题是它不断向显示以下内容的控制台抛出错误: 错误:$ digest已经在进行中 有谁知道如何避免这种错误或以不同的方式实现相同的目的?

9
AngularJS从子控制器访问父作用域
我已经使用设置了我的控制器 data-ng-controller="xyzController as vm" 我有一个父/子嵌套控制器的场景。通过使用$parent.vm.property,我可以毫无问题地访问嵌套html中的父属性,但是我无法弄清楚如何从子控制器中访问父属性。 我试过注入$ scope然后使用$scope.$parent.vm.property,但这不起作用吗? 谁能提供建议?

6
$ rootScope。$ broadcast与$ scope。$ emit
现在,之间的性能差异$broadcast和$emit已被淘汰,没有任何理由,更喜欢$scope.$emit到$rootScope.$broadcast? 他们是不同的,是的。 $emit 仅限于范围层次结构(向上)-如果适合您的设计,这可能很好,但是在我看来,这是一个相当随意的限制。 $rootScope.$broadcast在所有选择收听此活动的人中都有效,这在我看来是一个更明智的限制。 我想念什么吗? 编辑: 为了对回答做出澄清,调度的方向不是我要解决的问题。$scope.$emit向上调度事件,$scope.$broadcast-向下调度事件。但是,为什么不总是使用它$rootScope.$broadcast来吸引所有预期的听众呢?

8
$观看对象
我想监视字典中的更改,但是由于某种原因,未调用监视回调。 这是我使用的控制器: function MyController($scope) { $scope.form = { name: 'my name', surname: 'surname' } $scope.$watch('form', function(newVal, oldVal){ console.log('changed'); }); } 这是小提琴。 我希望每次更改名称或姓氏时都会触发$ watch回调,但是不会发生。 正确的方法是什么?


5
在AngularJS中编写指令时,如何确定是否不需要新的作用域,新的子作用域或新的隔离作用域?
我正在寻找一些指南,可以用来帮助确定编写新指令时要使用的范围类型。理想情况下,我想要类似于流程图的内容,该流程图将引导我解决一系列问题并弹出正确的答案-没有新的新作用域,新的子作用域或新的孤立作用域-但这可能要求太多。这是我目前微不足道的指导原则: 如果将使用指令的元素使用ng-model,请不要使用隔离范围。 请参见我可以将ng-model与隔离范围一起使用吗?以及 为什么格式化程序不适用于隔离范围? 如果指令不修改任何范围/模型属性,请不要创建新的范围 如果伪指令封装了一组DOM元素(文档中说“复杂的DOM结构”),并且该伪指令将用作一个元素,或者在同一元素上没有其他伪指令,则隔离作用域似乎工作良好。 我知道在某个元素上使用具有隔离范围的指令会强制同一元素上的所有其他指令使用相同的(一个)隔离范围,因此在可以使用隔离范围时这不会严格限制吗? 我希望Angular-UI团队中的一些人(或编写了许多指令的其他人)可以分享他们的经验。 请不要添加简单的回答“对可重用组件使用隔离范围”。


5
在观看AngularJS中的模型更改时如何忽略初始负载?
我有一个网页可以用作单个实体的编辑器,它位于$ scope.fieldcontainer属性中的深层图形中。从REST API获得响应(通过$ resource)后,将手表添加到“ fieldcontainer”。我正在使用此手表来检测页面/实体是否为“脏”。现在,我正在使“保存”按钮弹跳,但实际上我想使“保存”按钮不可见,直到用户弄脏模型为止。 我得到的只是手表的一个触发器,我认为这是在发生,因为.fieldcontainer = ...分配是在创建手表后立即进行的。我本来只是想使用“ dirtyCount”属性来吸收最初的错误警报,但是感觉很hacky……而且我认为必须有一种“ Angular惯用的”方式来处理此问题-我不是唯一的人用手表检测脏模型。 这是我设置手表的代码: $scope.fieldcontainer = Message.get({id: $scope.entityId }, function(message,headers) { $scope.$watch('fieldcontainer', function() { console.log("model is dirty."); if ($scope.visibility.saveButton) { $('#saveMessageButtonRow').effect("bounce", { times:5, direction: 'right' }, 300); } }, true); }); 我一直在想,有一种比使用“ if(dirtyCount> 0)”保护我的“ UI污染”代码更干净的方法了……

4
使用ng-include时失去作用域
我有这个模块的路线: var mainModule = angular.module('lpConnect', []). config(['$routeProvider', function ($routeProvider) { $routeProvider. when('/home', {template:'views/home.html', controller:HomeCtrl}). when('/admin', {template:'views/admin.html', controller:AdminCtrl}). otherwise({redirectTo:'/connect'}); }]); 原始HTML: <div ng-include src="views.partial1"></div> partial1 HTML: <form ng-submit="addLine()"> <input type="text" ng-model="lineText" size="30" placeholder="Type your message here"> </form> HomeCtrl: function HomeCtrl($scope, $location, $window, $http, Common) { ... $scope.views = { partial1:"views/partial1.html" }; …

5
角度指令能否将参数传递给指令属性中指定的表达式中的函数?
我有一个使用callback带有隔离范围的指定属性的form指令: scope: { callback: '&' } 它位于内,ng-repeat因此我传递的表达式包括id对象的,作为回调函数的参数: <directive ng-repeat = "item in stuff" callback = "callback(item.id)"/> 当我完成指令后,它会$scope.callback()从其控制器函数中调用。在大多数情况下,这很好,这就是我想要做的,但是有时我想从directive自身内部添加另一个参数。 是否有一个允许这样的角度表达式:$scope.callback(arg2),导致用callback调用arguments = [item.id, arg2]? 如果没有,那么最干净的方法是什么? 我发现这可行: <directive ng-repeat = "item in stuff" callback = "callback" callback-arg="item.id"/> 用 scope { callback: '=', callbackArg: '=' } 和指令调用 $scope.callback.apply(null, [$scope.callbackArg].concat([arg2, arg3]) ); 但我认为这不是特别整洁,它涉及在隔离范围内放入其他内容。 有没有更好的办法? 此处为Plunker游乐场(已打开控制台)。

10
Angular.js:'控制器作为语法'和$ watch
使用controller as语法时如何订阅属性更改? controller('TestCtrl', function ($scope) { this.name = 'Max'; this.changeName = function () { this.name = new Date(); } // not working $scope.$watch("name",function(value){ console.log(value) }); }); <div ng-controller="TestCtrl as test"> <input type="text" ng-model="test.name" /> <a ng-click="test.changeName()" href="#">Change Name</a> </div>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.