Javascript $scope.$watch未启动(控制器作为vm)

Javascript $scope.$watch未启动(控制器作为vm),javascript,angularjs,Javascript,Angularjs,无论我从同一个问题的答案中尝试了什么,我都无法让它起作用。 注意,我还使用了一个 var-app=angular.module('plunker',[]); 应用程序控制器('MainCtrl',函数($scope){ var vm=这个; vm.flags=[ {字段:“PaymentMake”,标题:“PaymentMake”,isSeaAir:false,filter:null}, {字段:“isInTransit”,标题:“运输中”,isSeaAir:false,筛选器:null},

无论我从同一个问题的答案中尝试了什么,我都无法让它起作用。 注意,我还使用了一个

var-app=angular.module('plunker',[]);
应用程序控制器('MainCtrl',函数($scope){
var vm=这个;
vm.flags=[
{字段:“PaymentMake”,标题:“PaymentMake”,isSeaAir:false,filter:null},
{字段:“isInTransit”,标题:“运输中”,isSeaAir:false,筛选器:null},
{字段:“停靠”,标题:“停靠”,isSeaAir:false,筛选器:null},
{字段:“isDockedPartial”,标题:“Docked Partial”,isSeaAir:true,filter:null},
];
$scope.$watch('vm.flags',函数handleFlagsChange(newVla,oldVal){
console.log(“标志更改”);
});
});
应用指令('不确定',[函数(){
返回{
要求:“?ngModel”,
链接:函数(范围、el、属性、ctrl){
var truthy=真;
var falsy=假;
var nully=null;
ctrl.$formatters=[];
ctrl.$parsers=[];
ctrl.$render=函数(){
var d=ctrl.$viewValue;
el.数据('已检查',d);
开关(d){
事实真相:
el.道具(“不确定”,虚假);
el.道具(“已检查”,正确);
打破
法尔西案:
el.道具(“不确定”,虚假);
el.道具(“已检查”,错误);
打破
违约:
el.道具(“不确定”,真实);
}
};
el.bind('单击',函数(){
变量d;
开关(el.data(‘已检查’)){
法尔西案:
d=真实的;
打破
事实真相:
d=空;
打破
违约:
d=法尔西;
}
ctrl.$setViewValue(d);
作用域$apply(ctrl.$render);
});
}
};
}]);

旗帜:
{{f.title}}{f.filter}}

您需要添加第三个参数
true
,以检查对象是否相等

$scope.$watch('vm.flags' , function handleFlagssChange(newVla, oldVal) {
    console.log("flags changed");
}, true);

当objectEquality==true时,watchExpression的不等式为 根据angular.equals函数确定。保存值 为便于以后比较,将使用angular.copy函数。 因此,这意味着观察复杂对象将产生不利影响 内存和性能影响