0

私のコードでは、いくつかの変数の変更を監視するために次のものがあります

$scope.$watch('ns.namespacea.watchable_value', function(newVal, oldVal){
    //...
})

$scope.$watch('ns.namespaceb.watchable_value', function(newVal, oldVal){
    //...
})

$scope.$watch('ns.namespacec.watchable_value', function(newVal, oldVal){
    //...
})

namespaces前のコードは正常に動作しますが、aがたくさんありwatchable_value、やりたいです

var namespaces = ['namespacea', 'namespaceb', 'namespacec'];

for (i = 0; i < namespaces.length; i++) {
    var namespace = 'ns.' + namespaces[i] + '.watchable_value';
    console.log(namespace) //prints 'ns.namespacea.watchable_value', 'ns.namespaceb.watchable_value, ..
    $scope.$watch(namespace, function(newVal, oldVal){
        //...
    })
}

しかし、コールバックは決して呼び出されません

4

3 に答える 3

0

私が言ったように、これは正常に機能するため、コールバックの問題だと思います。

$scope.ns= {namespacea: {value: 'testa'},
            namespaceb: {value: 'testb'},
            namespacec: {value: 'testc'}
           };
for (i = 0; i < namespaces.length; i++) {
    var namespace = 'ns.' + namespaces[i] + '.value';
    console.log(namespace);
    $scope.$watch(namespace, function(newVal, oldVal){
        console.log(newVal);
    })
}

http://jsfiddle.net/xdsn8/

そのため、コールバックに名前空間を認識させるクロージャーを作成するだけで機能します。このような:

http://jsfiddle.net/xdsn8/1/

于 2013-08-21T17:47:43.410 に答える