2016-08-08 7 views
0
$scope.arr = [ 
[["TTT", 23],3], 
[["PPP", 23],3], 
[["KKK", 23],3] 
]; 

Ich muss überwachen auf arr [0] [0] [0] Element des Arrays.Wie überwacht man eine Array-Eigenschaft eines Array-Arrays?

Rendern von arr [0] [0] [0], arr [1] [0] [0], arr [2] [0] [0] in Textfeld mit ng-Modell über ng-repeat für alle Arrays.

Wie watch auf ng-Modell-Variable anwenden, sobald ich etwas in Textfeld eintippe?

Ich versuchte Uhr auf gesamte Array arr anzuwenden, sondern es auslösen nicht unter Uhr Funktion

$scope.$watch($scope.arr, function (newVal, oldVal) 
{ 
$log.log(newVal); 
} 
); 

html:

<div ng-repeat="el in arr"> 
Name: <input type="text" ng-model = "el[0][0]" /> 
</div> 

Antwort

0

Es scheint, das Problem liegt in der Tatsache, dass ein neuer Rahmen für jede Iteration von ng-repeat erzeugt wird. Um dies zu umgehen, können Sie für jede Iteration einen separaten Controller hinzufügen, wie in der Beschreibung here erläutert.

Die einfachste Art, wie ich denken kann, um diese ohne mehrere Controller zu erhalten, ist die ng-change Richtlinie zu verwenden, etwa so:

JS:

$scope.getChanged = function(newValue) { 
    alert('getChanged(), new value: ' + newValue); 
} 

HTML:

<input type="text" ng-model="a[0][0]" ng-change="getChanged(a[0][0])" /> 

Hier ist eine fiddle zeigt es in Aktion.

+0

Sie sind Awesome :) Ich habe das gleiche aus Ihrem vorherigen Beitrag versucht und es hat funktioniert. Vielen Dank Danny. – test

+0

Dies als die Antwort markieren – test

0

Wenn Sie nur withing die nur die spezifischen Elemente sehen wollen Array, können Sie mit der $ watchGroup-Methode von Angular Scope mehrere Ausdrücke beobachten. Probieren Sie das Beispiel unten aus.

angular.module("myApp", []).controller("TestCtrl", function($scope) { 
 
    $scope.arr = [ 
 
    [ 
 
     ["TTT", 23], 3 
 
    ], 
 
    [ 
 
     ["PPP", 23], 3 
 
    ], 
 
    [ 
 
     ["KKK", 23], 3 
 
    ] 
 
    ]; 
 
    $scope.$watchGroup($scope.arr.map((a, i) => "arr[" + i + "][0][0]"), function(newVals, oldVals) { 
 
    alert("Updated from " + oldVals + " to:" + newVals); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script> 
 

 
<body ng-app="myApp"> 
 
    <div ng-controller="TestCtrl"> 
 
    <div ng-repeat="el in arr"> 
 
     Name: 
 
     <input type="text" ng-model="el[0][0]" /> 
 
    </div> 
 
    </div> 
 
</body>

+0

Vielen Dank für Ihre Hilfe, aber ich denke, der Danny Vorschlag ist der richtige Grund und ebenso die richtige Lösung für mein Problem – test

Verwandte Themen