- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于监视对象作用域变量,将 $scope.$watch
与 objectEquality
设置为 true 还是 $scope.$watchCollection
更好?
对于使用 View 中的输入元素和 ng-model
更新的 $scope
对象变量(如 15 个属性,一些嵌套 2 层深),$scope.$watch
将 objectEquality
设置为 true
?这是一件需要避免的大事吗?
$watchCollection
是更好的解决方案吗?
我正在寻找简单的方法来提高我的 AngularJS 应用程序的性能(我仍然停留在 v1.2.2)。
// ctrl scope var
$scope.filters = {
name: '',
info: {test: '', foo: '', bar: ''},
yep: ''
// etc ...
}
// ctrl watch ?
$scope.$watch('filters', function(newVal, oldVal) {
if(newVal !== oldVal) {
// call with updated filters
}
}, true);
// or ctrl watch collection ?
$scope.$watchCollection('filters', function(newVal, oldVal) {
if(newVal !== oldVal) {
// call with updated filters
}
});
// view input with ng-model
<input type="text" ng-model="filters.name" />
<input type="text" ng-model="filters.info.test" />
<input type="text" ng-model="filters.yep" />
// etc ...
最佳答案
$watch() 将由以下条件触发:
$scope.myArray = [];
$scope.myArray = null;
$scope.myArray = someOtherArray;
$watchCollection() 将由以上所有内容触发并且:
$scope.myArray.push({}); // add element
$scope.myArray.splice(0, 1); // remove element
$scope.myArray[0] = {}; // assign index to different value
$watch(..., true) 将由以上所有内容触发并且:
$scope.myArray[0].someProperty = "someValue";
还有一件事...
$watch() 是当一个数组被另一个具有相同内容的数组替换时唯一触发的函数。例如:
$scope.myArray = ["Apples", "Bananas", "Orange" ];
var newArray = [];
newArray.push("Apples");
newArray.push("Bananas");
newArray.push("Orange");
$scope.myArray = newArray;
下面是一个示例 JSFiddle 的链接,该示例使用所有不同的 watch 组合并输出日志消息来指示触发了哪些“ watch ”:
关于AngularJS $watch 与 $watchCollection : which is better for performance?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26535415/
更新 此问题已在 1.3.0 beta 中得到解决:请参阅commit 我有一个数组,我想监听更改并将新值与旧值进行比较。 $watchCollection (http://docs.angular
我使用 $watchcollection 来观察我的模型的变化。我像这样初始化了我的模型 $scope.feature = { additional: [], coll
我有两个数组,每个数组都有 bool 值,我尝试使用 $watchCollecion 函数在其中一个数组发生某些更改时显示一条消息,但由于某种原因它不起作用。 我想看看这个 example 有什么问题
我正在尝试为用户的警报数量设置一个计数器。如果我 console.log $scope.alerts 和 $scope.count,我可以看到两者都在更新,但是使用 {{alerts.length}}
我们有一个名称包含点 (.) 的属性。我知道这并不常见,但原因是这些是自动构建的,您可能会将其视为 key1.key2。 现在这个属性“key1.key2”的 watchCollection 失败了,
我有以下指令: app.directive('rickshawChart', function() { return{ $scope: { da
我正在使用 $watchCollection 来观察数组长度的变化。但是当我将任何项目添加到数组时它似乎不起作用。我哪里出错了? var app = angular.module('plunker',
我有一个嵌套数组: $scope.itinerary = [ [ {name:'x'}, {name:'y'}, {
我有一个了解一段代码的小查询。 我的印象是 $watchCollection 将监视数组 , 当根据以下语法作为参数传递时: $watchCollection(obj, listener); 然而,我
我正在尝试使用 $watchCollection 函数将表(ui 网格)与 Angular 中的另一个 View 连接起来。我需要 $watchCollection 来监视表中的文本框(过滤器区域),
有2 ways to watch a group of variables在 Angular 。但它们之间有什么区别呢? 他们似乎都做浅表。是否存在其中一种明显优于另一种的情况? 最佳答案 $watc
我使用三个输入复选框和 ngModel 指令来绑定(bind)到名为“props”的对象的属性。 我正在使用 $scope.$watchCollection 设置对“props”的所有属性(共有三个)
我有一个包含 3 个复选框值的 html 文件 并且在 Controller 中定义了一个 watchCollection,当复选框状态改变时它会被触发 $scope.$watchGroup([
我正在尝试使用来自 Controller 的 $scope.$watchCollection 来监控我拥有的服务。当我的 Controller 最初被调用时, watch 会被调用,但每次都不会。 我
这篇文章与:Is there a tidy way to define a large watch collection for AngularJS? 不同 我的代码是(service.js): va
当 $scope.$watchCollection 用于更改对象中的属性时,它仅评估第一级属性。当调用 $scope.$watchCollection 时,有没有办法强制 angular 评估第二级或
我在 AngularJS 中遇到一个问题,其中 $scope.$watchCollection() 抛出错误。我已将代码减少到与文档中的示例代码完全相同( http://docs.angularjs.
我正在编写的一些代码存在问题,这些代码应该利用我正在上传的文件。 问题说明 基本上,我正在工作的这个迷你项目有两个部分。第一部分是我编写的指令,用于监视文件输入并捕获正在上传的文件。然后将捕获的文件
对于监视对象作用域变量,将 $scope.$watch 与 objectEquality 设置为 true 还是 $scope.$watchCollection 更好? 对于使用 View 中的输入元
我在屏幕上有一个“添加项目”按钮,单击它可以将新项目添加到列表中。 我使用 $scope.$watchCollection 来观察返回所有可见项列表的函数。 当我点击“添加项目”按钮时,我收到无限摘要
我是一名优秀的程序员,十分优秀!