我有这个对象
vm.obj = {
prop1: 1,
prop2: 'test2',
prop3: ['test 3'],
hashes: {
objToWatchOnePlusHash123: {
watchThis: 'value 1',
subOne: 1,
subTwo: '2',
},
objToWatchTwoPlusHash456: {
watchThis: 'value 2',
subOne: 3,
subTwo: '4',
},
},
};
我只想在每个watchThis
中观看objToWatch*PlusHash*
的值(这将是一个实际的哈希值,因此它将是独一无二的。)
目前,我使用
运行$scope.$watch('vm.obj.hashes', function (newVal, oldVal) {
/* */
}, true)
但它也会被每个对象中subOne
和subTwo
的更改触发。
可能只看我想看的东西?考虑到它们是两个具有不同键的对象。
答案 0 :(得分:0)
在这个JSON中
vm.obj = {
prop1: 1,
prop2: 'test2',
prop3: ['test 3'],
hashes: {
objToWatchOnePlusHash123: {
watchThis: 'value 1',
subOne: 1,
subTwo: '2',
},
objToWatchTwoPlusHash456: {
watchThis: 'value 2',
subOne: 3,
subTwo: '4',
},
},
};
在不知道watchThis
属性的情况下,无法在所有对象中观看objToWatch***
。您只能观看整个对象。
您可以做的一件事是,如果您当时能够获得哈希密钥。 (可能的解决方法)
然后
$scope.$watch('vm.obj.hashes', function (newVal, oldVal) {
if(newVal[hash].watchThis !== oldVal[hash].watchThis){
// do something
}
}, true)
答案 1 :(得分:0)
是的,您可以观看不同对象键的特定属性。为了这个写
watch 函数,它将返回value
- 所有监视属性的某种组合,在这种特殊情况下,它是具有相应属性的对象的JSON表示:
angular.module('app', []).controller('ctrl', ['$scope', function($scope) {
var vm = this;
vm.obj = {
prop1: 1,
prop2: 'test2',
prop3: ['test 3'],
hashes: {
objToWatchOnePlusHash123: {
watchThis: 'value 1',
subOne: 1,
subTwo: '2',
},
objToWatchTwoPlusHash456: {
watchThis: 'value 2',
subOne: 3,
subTwo: '4',
},
},
};
$scope.$watch(function(){
var value = {};
for(var prop in vm.obj.hashes)
if(prop.match(/^objToWatch\D+PlusHash\d+$/))
value[prop] = vm.obj.hashes[prop].watchThis;
return JSON.stringify(value);
}, function(newVal, oldVal){
console.log('OldVal:' + oldVal + '\n\rNewVal:' + newVal);
})
}])

<script src="//code.angularjs.org/snapshot/angular.min.js"></script>
<div ng-app='app' ng-controller="ctrl as vm">
<div ng-repeat='(key, val) in vm.obj.hashes'>
{{key}}.watchThis: <input type='text' ng-model='vm.obj.hashes[key].watchThis'>
</div>
objToWatchTwoPlusHash456.subOne: <input type='text' ng-model='vm.obj.hashes.objToWatchTwoPlusHash456.subOne'>
</div>
&#13;