2017-11-01 4 views
0

Ich weiß, dass es mehrere Fragen zu meinem Problem gibt, aber ich habe immer noch ein Problem, das dies behebt. Ich habe folgende HTML und JavaScript-Code:Angularjs: Wert der Objekteigenschaft wird nicht aktualisiert

<!doctype html> 
<html ng-app="Demo"> 
<head> 
    <meta charset="utf-8" /> 
    <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous">  
    </script> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js">  
    </script> 

</head> 
<body ng-controller="AppController"> 

     <input type="" name="" ng-model="docs[1].value"> 
     {{m3.value}} 
     {{m4}} 

    <script type="text/javascript"> 
     var app = angular.module('Demo', []); 

     app.controller(
      "AppController", 
      function($scope) { 

       $scope.docs=[{value:"first doc"}, {value:"second doc"}];     

       $scope.m3=$scope.docs[1]; 
       $scope.m4=$scope.docs[1].value; 

      } 
     ); 


    </script> 

</body> 
</html> 

Wenn ich in dem Eingangstyp, wird die m3.value aktualisiert aber m4 nicht! Ich kann nicht herausfinden, warum das passiert. Jeder Kommentar wird geschätzt.

Antwort

0

Ok, so, wie ich es gelöst ist, einen Beobachter zu m3.value hinzuzufügen:

$scope.$watch('m3.value', function(){ 
    console.log('Changing'); 
    $scope.m4 = $scope.m3.value; 
}); 

Und jetzt $ scope.m4 Updates.

+0

Das ist nicht richtig, wenn die Bindung funktioniert –

+0

Dies ist die einzige Möglichkeit, die für mich arbeitete, die NG-Änderung, die Sie vorgeschlagen, passt nicht zu dem, was ich will. Bitte beachten Sie, dass der Code, den ich hier angegeben habe, eine vereinfachte Version meines ursprünglichen Codes ist. – user1512681

+0

Ich habe ng-change gezeigt, um Ihnen zu zeigen, dass Modal aktualisiert wird und nicht für Ihre Code-Verwendung vorgeschlagen wird –

4

Statement 1:

$scope.m3=$scope.docs[1]; 

Diese Erklärung für das Modell die Referenz Speicherung docs[1]

so wird {{m3.value}} Modellwert aktualisiert.

Statement 2:

$scope.m4=$scope.docs[1].value; 

Diese Aussage des eigentlichen Grundwert zu kopieren.

so, {{m4}} immer noch alte Wert

+0

Danke, aber wie soll ich an die Docs [1] .value im Controller dann binden? – user1512681

+0

@ user1512681 Sie können '$ scope.docs [1] .value' oder' m3.value' verwenden, um den aktualisierten Wert in Controller –

+0

(Off-Thema) zu erhalten, ist es immer noch eine Zwei-Wege-Bindung? Wird es Teil von Beobachtern sein? –

Verwandte Themen