2017-08-15 55 views
0
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); 

}]); 

这样,我想知道一个对象的更改的属性,但我不知道我可以在手表(在我的例子代码所示),其性质已经改变了检测。如何使用angularJS

+0

你想要一个物体不同吗? –

+0

@DaveNewton是的。说,如果我让用户=真,那么我想要“用户”财产。 – Arif

+0

为什么你需要知道哪一个? – baklazan

回答

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]) 
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循环做的伎俩。

0

我觉得观察家无法检测和财产所更改, 您可以通过使用watchGroup或watchCollection 使招溶液(见$ watchCollection将浅手表一个对象的属性和通知您,如果他们中的一个变化。然而

$ watchGroup手表一组单独的表表达式。)

也可以检查(how to know which object property changed?)。