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