2016-12-21 5 views
0
$scope.testObj={}; 
angular.forEach(results, function (value,index) { 
$scope.testObj[index]=value.arr; 

console.log($scope.testObj[index]); 
console.log(index); 
$scope.$watch('testObj',function(newVal, oldVal) {  
     console.log(newVal, oldVal) ; 
     },true 
); 
}) 

上記のコードはうまく動作します(results;それは配列です)。

$scope.$watch('testObj[index]',function(newVal, oldVal) {  
      console.log(newVal, oldVal) ; 
      },true 
    ); 

を、私はそれがなぜ起こるか分からないと私はnewValに、OLDVAL両方からundefinedを取得しています:私はそれをしようとしているときに問題があります。どうすれば解決できるでしょうか?道testObj[0]作品に

...

+0

なぜあなたはオブジェクトに割り当てられていませんか? – Sajeetharan

+0

正確にはどういう意味ですか? –

+0

あなたは関数の引数に変数 'index'を渡そうとしていますが、何を期待していますか? –

答えて

2

が使用する

$scope.myvar = testObj[index]; 
$scope.$watch('myvar',function(newVal, oldVal) {  
      console.log(newVal, oldVal) ; 
      },true 
); 

EDIT

あなたはNGリピートであなたの配列を変更するレンダリングした場合は、することができ、これを試してみてくださいng-指示を変更して$ indexパラメータを渡します。

<div ng-repeat="arr in myvar"> 
    <input type="text" ng-model="arr.location" ng-change="changeValue($index)"/> 
</div> 

または

$scope.$watch('myvar', function (newValue, oldValue) { 
    for(var i = 0; i < newValue.length; i++) { 

    } 
}, true); 
+0

しかし、私はすべての配列を追跡したいと思います:testObj [0]、testObj [1] ...上記は私の仕事をしません –

+0

@ILIASは更新された回答を確認します – Sajeetharan

+0

私はそのビューを使用していませんコントローラ。 $ scopeのための方法はありますか?私が望むように最初の引数を理解する$ watch? –

0

あなたは他の方法でラウンドを得たに来ることができ、そのインデックスを使用してループし、アクセスを使用しています。 forEachは一度だけ実行されるため、内部の$watchersは一度それを見てから倒れてしまいます。あなたがしなければならないことは、コレクションを見て、あなたのforEachを入れておいてください。

$scope.$watch('testObj', function(newVal, oldVal) { 
    angular.forEach(newVal, function(value, index) { 
    $scope.testObj[index] = value.arr; 
    console.log($scope.testObj[index]); 
    console.log(index); 
    }) 
}, true); 
関連する問題