app.controller('indexController', ['$scope', 'authService', function ($scope, authService) {
var vm = this;
vm.$onInit = function () {
vm.active = {
"home": true,
"welcome": false,
"user": false,
"logout": false,
"login": false,
"signup":false
};
};
$scope.$watch('vm.active', function (newObj, oldObj) {
// How to detect which property has changed ?
}, true);
}]);
这种方式我试过,但我不知道如何在手表中检测到(在我的示例代码中显示),哪个属性已更改。
答案 0 :(得分:2)
您可以运行其中一个对象的键,并按值对其进行过滤。 这样的事情:
const obj1 ={
"home": true,
"welcome": false,
"user": false,
"logout": false,
"login": false,
"signup":false
};
const obj2 = {
"home": true,
"welcome": false,
"user": false,
"logout": true,
"login": true,
"signup":false
};
const diff = Object.keys(obj1).filter((key) => obj1[key] !== obj2[key])
答案 1 :(得分:0)
const obj1 ={
"home": true,
"welcome": false,
"user": false,
"logout": false,
"login": false,
"signup":false
};
const obj2 = {
"home": true,
"welcome": false,
"user": false,
"logout": true,
"login": true,
"signup":false,
"somethingNew": false
};
for (myProperty in obj2){
if (obj2[myProperty] !== obj1[myProperty]){
alert(myProperty + ' has changed!');
}
}
我相信这应该使用for ... in循环。
答案 2 :(得分:0)
我认为观察者无法检测到并且属性发生了变化, 你可以使用watchGroup或watchCollection来制作技巧解决方案 (请参阅$ watchCollection将浅看单个对象上的属性,并在其中一个对象发生更改时通知您。
然而,