【问题标题】:AngularJS: Get selected ItemAngularJS:获取选定的项目
【发布时间】:2016-07-03 11:31:09
【问题描述】:

我有一个 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 获取所有角色并将其添加到 &lt;select&gt; 字段

//获取所有角色并添加到选择字段

$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>

在这里,当我在 &lt;select&gt; 字段中为用户选择另一个角色并尝试获取 $scope.selectedItem.RoleId 时,它会给出新的选定 RoleId 但是当我尝试从 @987654326 获取 $scope.selectedItem.RoleName @field 它没有给出新的选中项,而是返回旧的选中项

$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();
    });


  };

【问题讨论】:

    标签: javascript angularjs angularjs-ng-repeat angularjs-http http-put


    【解决方案1】:

    我认为这是由于给您的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 指令。

    【讨论】:

    • 当我点击用户进行编辑时,我希望在 字段中的旧角色
    • @user3055606 查看我的编辑,它将向您展示如何使用ng-select
    • 你的意思是我必须将选定的索引传递给 $scope.selectedItem = $scope.myData[0];
    • 我猜旧的选择值来自你的 API,所以你必须恢复与这个旧的选择值对应的索引并执行类似$scope.selectedItem = $scope.myData[index of old value]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 2015-08-17
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多