我data在控制器中有这个
$scope.data = {
home: {
baseValue: "1",
name: "home"
},
contact: {
baseValue: "2",
name: "contract"
}
// a lot more options
};
Run Code Online (Sandbox Code Playgroud)
有一些像这样的HTML:
<section class="content row" ng-repeat="item in data">
{{item.name}}
....
</section>
Run Code Online (Sandbox Code Playgroud)
现在,我想知道什么时候发生了baseValue变化,但由于我在数据变量中使用了一个对象,我不能watch以更简单的方式使用该属性.
我尝试过类似的东西,但我必须循环所有数组
$scope.$watch('data', function (newValue, oldValue, scope) {
// some code to compare the tow arrays, line by line
}, true);
Run Code Online (Sandbox Code Playgroud)
我怎样才能更简单$watch地知道什么时候baseValue改变了?
类似的问题:
更新 1
我可以为每个对象添加一个单独的监视器,以便知道何时baseValue更改,但如果我有n多个对象,不仅仅是像这个示例中的几个对象那样也不会很好
$scope.$watch('data.home', function (newValue, …Run Code Online (Sandbox Code Playgroud) 对于观看的对象范围内的变量,是$scope.$watch用objectEquality设置为true或$scope.$watchCollection更好?
对于一个$scope对象变量(如15点的属性,一些嵌套2级深)与输入元件和更新ng-model在视图中,是怎样坏$scope.$watch与objectEquality设置为true?这是一件要避免的大事吗?
是$watchCollection更好的解决方案吗?
我正在寻找轻松获胜以提高我的AngularJS App的性能(我仍然坚持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) {
// …Run Code Online (Sandbox Code Playgroud) 我有一个十个对象的数组.它们中的每一个都包含六个属性并在视图中显示所有内容.用户可以通过在输入上键入新数据来更改属性.如何查看整个数组并确定哪个对象已更改的属性,并且不重复我的代码10次以分别观察每个对象?