AngularJS:获取选定的项目

AngularJS: Get selected Item

本文关键字:项目 获取 AngularJS      更新时间:2023-09-26

我有一个ng-repeat,按行显示用户,当用户被单击时,它会打开包含所有用户详细信息的模式弹出窗口用于编辑用户。当我为用户选择另一个角色并尝试获取新选择的行以传递给 http put 时,它不会给新选择的项目文本,而是仍然返回旧文本

在表格行中显示用户,点击用户名进行编辑

    <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-model="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时,它会给出新选择的RoleId,但是当我尝试从<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();
    });

  };

我认为这是由于对您的ng-repeat给予错误ng-model.这里使用的模型是 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 指令。