2017-08-15 38 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?)。