Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 监视指令范围不工作_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

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
更高效/性能更好。