2

我有一个奇怪的问题,我无法在 Plunker 上重现。在模型中设置第一个选项“用户”时,选择会正确显示它并设置为“用户”。当我用角色加载另一个用户时:'admin',选择设置为空白选项。

在我的控制器中,我定义:

$scope.roles = ['user', 'admin'];

我的 $scope.user 对象如下所示:

{
   "_id": "54f1f8f7e01249f0061c5088",
   "displayName": "Test1 User",
   "provider": "local",
   "username": "test1",
   "__v": 0,
   "updated": "2015-03-02T07:41:42.388Z",
   "created": "2015-02-28T17:20:55.893Z",
   "role": "admin",
   "profileImageURL": "modules/users/img/profile/default.png",
   "email": "test1@user.com",
   "lastName": "User",
   "firstName": "Test1"
}

在我看来:

<select id="role" class="form-control" data-ng-model="user.role" data-ng-options="role for role in roles"></select>

当我反转角色数组$scope.roles = ['admin', 'user'];时,管理员会正确显示,并且不会将“用户”设置为选中状态。

奇怪的是,如果我将第三个项目添加到数组中$scope.roles = ['user', 'admin', 'joe'];,那么前两个“用户”和“管理员”将被正确设置,而最后一个“乔”则不会。

有任何想法吗?

- - 更新 - -

生成的选择标记如下所示:

<select id="role" class="form-control ng-pristine ng-valid" data-ng-options="role for role in roles" data-ng-model="user.role">
    <option value="? string:joe ?"></option>
    <option value="0" selected="selected" label="admin">admin</option>
    <option value="1" label="user">user</option>
    <option value="2" label="joe">joe</option>
</select>
4

4 回答 4

1

刚刚完成了与这个的斗争。我的模型 $scope.details.source 被 ajax 填充,导致了这个问题。(即当ajax返回时,select不会初始化到数组中的最后一项,其他值初始化OK)。我确实找到了解决办法。我有

$scope.sources = ["1", "2", "3", "4", "5", "6", "7", "8"];
<select ng-model="details.source" ng-options="item for item in sources"> </select>

并将其更改为:

$scope.sources = [{index:0, value:"1"}, {index:1, value:"2"}, {index:2, value:"3"}, {index:3, value:"4"}, {index:4, value:"5"}, {index:5, value:"6"}, {index:6, value:"7"}, {index:7, value:"8"}];
<select ng-model="details.source" ng-options="item.index as item.value for item in sources"> </select>

我发现当模型在控制器中初始化而不是ajax时,问题并不存在。不知道为什么......但它的工作原理。

于 2015-08-17T19:53:30.383 回答
0

我发布了一个解决方法,但不是解决方案,也不是对上述问题的解释。如果有人有实际信息为什么会发生这种情况,以及如何使用 arrays 进行这项工作,请分享,我很乐意接受它作为答案。

我将选项从简单数组更改为对象数组:

$scope.roles = [{name:'Admin',value:'admin'},{name:'User', value:'user'}];

我的观点是:

<select data-ng-model="user.role" data-ng-options="role.value as role.name for role in roles"></select>

感谢Ilya Luzyanin的帮助和指导!

于 2015-03-02T12:32:33.840 回答
0

我按照您的建议进行了所有组合,但没有发生错误。

请查看我的测试:

http://plnkr.co/edit/jzfhD3D60fhj8yFqBqgJ?p=preview

<h3>select</h3>
<select ng-model="role" ng-options="item for item in roles"></select>
<h3>original</h3>
<select id="role" class="form-control" data-ng-model="user.role" data-ng-options="role for role in roles"></select>

尝试验证您的 angularjs 版本。也许可能是特定版本错误。

于 2015-03-03T13:50:39.400 回答
0

可能晚了,但这是一个帮助我的解决方案。我总是添加一个虚拟的不可见选项,它在列表中的最后一个并且永远不会被选中。

<select class="form-control" 
        ng-options="r as r for r in myList | orderBy track by r"
        ng-model="item">
    <option ng-show="false"></option> <!-- TRICK: select last value too -->
</select>
于 2019-02-12T15:58:32.667 回答