2013-08-21 30 views
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){ 
    //... 
}) 

前面的代碼工作的精緻腕錶的變化,我有以下,但我有很多namespaceswatchable_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){ 
     //... 
    }) 
} 

但回調從來沒有被稱爲

+1

您是否試圖在$ scope之前使用console.log(namespace)$ watch? 你是什麼意思'沒有成功'?這可能是一個與回調問題,而不是與$ watch –

+0

是的,我試着console.log和showme正確的價值,我已經更新了這個問題,以更好地理解 – rkmax

+0

回調工作正常我只是不想寫同樣的東西7次(現在) – rkmax

回答

0

當您使用for ... in,你得到鑰匙,沒有值:

for (var namespace in myNamespaces) { 
    $scope.$watch('ns.' + myNamespaces[namespace] + '.watchable_value', function(newVal, oldVal){ 
     //... 
    }) 
} 

只要索引回數組,你應該沒問題。

+0

對不起,我已經更新了避免循環話題的問題 – rkmax

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/

0

,當我包裝成封閉狀commet @SebastienC。正常工作

namespaces = ['minuta', 'menu', 'plato']; 

callback = function(i) { 
    var name = 'ns.' + i + '.value'; 
    return $scope.$watch(name, function(newVal, oldVal) { 
    // ... 
    }); 
}; 

for (_i = 0, _len = namespaces.length; _i < _len; _i++) { 
    i = namespaces[_i]; 
    callback(i); 
}