在Angular指令中对数据的变化进行$watch监控。
在Angular指令中对数据的变化进行$watch监控。
当在Angular指令中操作数据(例如插入或删除数据)时,如何触发$watch
变量,而不是为该变量分配一个新对象?
我当前正在从JSON文件加载一个简单的数据集。我的Angular控制器执行此操作,并定义了一些函数:
App.controller('AppCtrl', function AppCtrl($scope, JsonService) { // 加载初始数据模型 if (!$scope.data) { JsonService.getData(function(data) { $scope.data = data; $scope.records = data.children.length; }); } else { console.log("我已经有数据了... " + $scope.data); } // 向'data'对象添加资源 $scope.add = function() { $scope.data.children.push({ "name": "!Insert This!" }); }; // 从'data'对象中删除资源 $scope.remove = function(resource) { console.log("我要删除这个!"); console.log(resource); }; $scope.highlight = function() { }; });
我有一个正确调用$scope.add
函数的
{{child.name}} |
然而,当所有这些发生时,我设置的指令无法被触发$scope.data
的$watch
事件。
我在HTML中定义了我的标签:
它与以下指令相关联(为了问题的清晰,进行了简化):
App.directive('d3Visualization', function() { return { restrict: 'E', scope: { val: '=' }, link: function(scope, element, attrs) { scope.$watch('val', function(newValue, oldValue) { if (newValue) console.log("我看到数据变化了!"); }); } } });
我在最开始时收到了"我看到数据变化了!"
的消息,但是在我点击“add”按钮后再也没有收到了。
在我只是向data
对象添加/删除对象时,如何触发$watch
事件,而不是获取一个完整的新数据集来分配给data
对象?