我的范围中有一个对象数组,我想要观察每个对象的所有值.
这是我的代码:
function TodoCtrl($scope) {
$scope.columns = [
{ field:'title', displayName: 'TITLE'},
{ field: 'content', displayName: 'CONTENT' }
];
$scope.$watch('columns', function(newVal) {
alert('columns changed');
});
}
Run Code Online (Sandbox Code Playgroud)
但是当我修改值时,例如我TITLE改为TITLE2,alert('columns changed')从不弹出.
如何深入观察数组内的对象?
有一个现场演示:http://jsfiddle.net/SYx9b/
我正在实现购物车,并希望将数据存储在localStorage中.我想观察变量$scope.cart的变化,以便我可以更新localStorage
cart变量如下所示:
[{'name':'foo', 'id':'bar', 'amount': 1 },...]
Run Code Online (Sandbox Code Playgroud)
这是手表的代码.
$scope.updateCart = function(){
localStorageService.add('cart',JSON.stringify($scope.cart));
alert('cart updated');
};
$scope.$watch($scope.cart, $scope.updateCart(), true);
Run Code Online (Sandbox Code Playgroud)
这是用户更改模型的HTML.
<li ng-repeat="item in cart">
{{item.name}} <input type="text" ng-model="item.amount">
</li>
Run Code Online (Sandbox Code Playgroud)
使用以下代码,updateCart()永远不会触发该方法.我不确定我做错了什么.我检查$scope.cart变量确实发生了变化,但未触发更新.
我使用此函数来观察对象数组的变化:
$scope.$watch('Data', function (newVal) { /*...*/ }, true);
Run Code Online (Sandbox Code Playgroud)
如何获取一个已更改属性的对象,以便我可以将其推送到数组中?例如:
var myApp = angular.module("myApp", []);
myApp.factory("Data", function(){
var Data = [{id:1, property: "Random"}, {id:2, property: "Random again"}];
return Data;
});
var myBigArray = [];
function tableCtrl($scope, Data){
$scope.TheData = Data;
$scope.$watch("TheData", function() {
//Here an object should be pushed
myBigArray.push(">>Object in which property has been changed <<<");
}, true);
}
Run Code Online (Sandbox Code Playgroud)