2016-04-18 8 views
0

Ich habe eine $ Uhr, in dem ich mein Modell bin zu aktualisieren. Aber mein Modell aktualisiert die gebundenen Steuerelemente in der Benutzeroberfläche nicht.

Hier ist ein Screenshot von aktualisierten Modell. enter image description here

meine ui hat dieses

<form method="post" action="" role="form" class="form-horizontal form-group-sm"> 

    <table ng-controller="myController" class="table table-responsive table-striped"> 
     <tr> 
      <td> 
       <label for="moduleid" class="col-md-2">Module ID : </label> 
       <div class="form-group col-md-3"> 

        <input type="text" id="moduleid" name="moduleid" ng-model="hdr.moduleid" value="" class="form-control"> 
       </div> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <label for="modulename" class="col-md-2">Module Name : </label> 
       <div class="form-group col-md-4"> 
        <input type="text" id="modulename" name="modulename" ng-model="hdr.modulename" value="" class="form-control"> 
       </div> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <label for="status" class="col-md-2">Status : </label> 
       <div class="form-group col-md-4"> 

        @Html.DropDownList("status", (List<SelectListItem>)ViewBag.StatusList, new { @class = "form-control ComboM required", @ng_model = "hdr.status", @style = "width: 240px" }) 
        @Html.AntiForgeryToken() 
       </div> 
      </td> 
     </tr> 
    </table> 
</form> 

Warum dieses Versagen meine UI zu aktualisieren ist.

EDIT: versuchte auch die folgenden. immer noch kein Glück.

$scope.$watch("mySelectedItems[0]", function (newVal, oldVal) { 
     var val; 
     if (newVal != oldVal) { 
      if (newVal == undefined && oldVal) 
       $scope.hdr = oldVal; 
      else $scope.hdr = newVal; 
     } 
     // alert($scope.hdr.modulename); 
    }); 

EDIT 2: arbeitet in JS Fiddle aber nicht in meinem Projekt. Bitte beachten Sie die Original SO Question

Antwort

1

Ihr $scope.hdr scheint ein Objekt zu sein. Objekte sind durch Referenz in JS gebunden (genau wie Arrays). Sie setzen Ihre $scope.hdr = y und das verursacht, diese Referenz zu brechen. Ihre Bindung wird nicht als Ergebnis aktualisiert. Je nach Ihren Objekten Inhalt, können Sie angular.extend oder angular.merge versuchen:

angular.extend($scope.hdr, y); 

Dokumentation:

https://docs.angularjs.org/api/ng/function/angular.extend

+0

Dank. Aber sieh dir das an JS Fiddle es funktioniert da !! https://jsfiddle.net/x5wt6m0w/4/ – Deb

+0

@Deb: Nun, das ist eine andere Lösung :) Sie beobachten sind 'mySelectedItems [0]', so 'newVal' bereits hält die richtige Referenz. Sie wenden dann diese Referenz auf Ihre '$ scope.hdr' über' val' an und verursachen das Update. Zumindest verstehe ich so, was vor sich geht :) – Fidel90

+0

y ist auch ein Objekt, das Teil der Sammlung mySelectedItems ist. – Deb