Javascript 监视指令范围不工作
上下文 我的控制器存储一个数组。按键盘上的特定快捷键时,我会将新对象添加到此数组中 数组在指令中用于显示图表 因此,按下快捷键后,图表应更新为新值 控制器Javascript 监视指令范围不工作,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,上下文 我的控制器存储一个数组。按键盘上的特定快捷键时,我会将新对象添加到此数组中 数组在指令中用于显示图表 因此,按下快捷键后,图表应更新为新值 控制器 vm.observation = [{ "sale": "202", "year": "2010" }, { "sale": "215", "year": "2011" }, { "sale": "179", "year": "2012" }, { "sale": "199",
vm.observation = [{
"sale": "202",
"year": "2010"
}, {
"sale": "215",
"year": "2011"
}, {
"sale": "179",
"year": "2012"
}, {
"sale": "199",
"year": "2013"
}, {
"sale": "134",
"year": "2014"
}, {
"sale": "176",
"year": "2015"
}];
指令
angular.module('spwApp.directives')
.directive('linechart', [function() {
return {
restrict: 'E',
scope: {
id: "@",
observation: "="
},
link: function($scope, element, attrs) {
$scope.$watch("observation", function(newVal, oldVal){
console.log("OBS : " + newVal);
}, true);
}
}
}])
HTML
<linechart id="linechart3" observation="vm.observation"></linechart>
当页面加载时,图表正确显示数据,并且控制台正确地在$watch
内登录,并且正确执行
无论如何,在按下快捷键后,$watch
不会被触发,而数组会被更新
我在代码中找不到错误如果向数组中添加了一些内容,但数组本身保持不变。常规观察者仅对更改的值作出反应。这就是为什么Angular还提供了
$watchCollection
:
$scope.$watchCollection("observation",
$watchCollection
还监视数组的内容,即它检查是否删除或添加了某些内容。您向数组中添加了一些内容,但数组本身保持不变。常规观察者仅对更改的值作出反应。这就是为什么Angular还提供了$watchCollection
:
$scope.$watchCollection("observation",
$watchCollection
还监视数组的内容,即它检查是否删除或添加了某些内容。尝试使用$watchCollection而不是$watch@Sajeetharan它现在进入$watch()
内部,但生成此错误$apply已在进行中
@GeorgeLee它似乎可以工作。请您发布并回答解释好吗?请尝试使用$watchCollection而不是$watchCollection$watch@Sajeetharan它现在进入$watch()
内部,但生成此错误$apply已在进行中
@GeorgeLee它似乎可以工作。您可以发布并回答解释吗?基本上,使用$watch it's going数组仍然等于一个数组,因此没有变化,您也可以执行$scope.$watch('observation',function(),true)
true将进行“深入”比较,但这会带来性能hit@GeorgeLee你使用深度比较是对的,但是,$watchCollection
更有效/性能更高。基本上,使用$watch it's going数组仍然等于一个数组,因此没有任何更改,您也可以执行$scope.$watch('observation',function(),true)
true将执行“深度”操作比较,但这是一个性能hit@GeorgeLee关于使用深度比较,您是对的,但是$watchCollection
更高效/性能更好。