0

我有一個NG-重複顯示用戶行,點擊用戶時,它打開模式彈出包含所有用戶的詳細信息編輯用戶。當我爲用戶選擇另一個角色並嘗試獲取新選擇的行以傳遞給http put時,它不會給出新選擇的項目文本,而是返回舊文本AngularJS:獲取選定項目

//在表中顯示用戶行,點擊用戶名編輯

<tr ng-repeat="item in usersData | filter: searchBox"> 

     <td><a ng-click="openEditUser($index)">{{item.UserName}}</a></td> 
     <td>{{item.EMail}}</td> 
     <td>{{item.RoleName}}</td> 
     <td style="text-align: right;">{{item.IsActive ? 'Yes' : 'No'}}</td> 

</tr> 

當模式彈出打開,我得到的所有角色,從API,並將其添加到<select>

//獲取所有角色,並添加到選擇現場

$http.get('mydomain.com/api/Users/GetAllRole').then(function (response) { 
      $rootScope.myData = {}; 
      $rootScope.myData = response.data; 
     }); 

//這裏NG-模型=「selectedItem.RoleId」

<select ng-required="true" ng-model="selectedItem.RoleId" class="form-control" 
       ng-options="item._id as item.RoleName for item in myData"> 
      <option value="">Select</option>         


</select> 

這裏時,我選擇在<select>領域的用戶另一個角色,並得到$ scope.selectedItem.RoleId它給新選擇角色ID,但是當我嘗試從<select>場不會給新選定的項目獲得$ scope.selectedItem.RoleName而是仍返回舊的所選項目

$scope.EditUser = function(){ 

    $http.put("domain.com/api/Users/UpdateUser", { 
     _id: $scope.selectedItem._id,'RoleId': $scope.selectedItem.RoleId, 'EMail': $scope.selectedItem.EMail, RoleName : $scope.selectedItem.RoleName, IsActive: $scope.selectedItem.IsActive 

    }).then(function (response) { 
     $route.reload(); 
     $scope.ok(); 
     $scope.simpleSuccess(); 
    }, function (error) { 
     $scope.ok(); 
     $scope.simpleError(); 
    }); 


    }; 

回答

1

我認爲,這是由於錯誤的ng-model給你的ng-repeat。這裏使用的模型是selectedItem.RoleId

Angular纔會更新您的對象的RoleId領域,而不是整個對象。您應該將ng-model設置爲selectedItem

<select ng-required="true" ng-model="selectedItem" class="form-control" ng-options="item._id as item.RoleName for item in myData"> 
    <option value="">Select</option>         
</select> 

不幸的是,您沒有提供任何JSFiddle,所以我無法檢查這實際上是問題的根源。

編輯

要使舊角色選擇,你必須將其設置爲API返回數組的相應入口。

我創建了這個JSFiddle,所以你可以看到如何正確使用ng-select指令。

+0

我想老選擇的角色是自動的在領域 – user3055606

+0

@ user3055606看看我的編輯老的作用,會告訴你如何使用'NG-select' – Erazihel

+0

你的意思我將不得不將選定的索引傳遞給$ scope.selectedItem = $ scope.myData [0]; – user3055606