标记:
<!DOCTYPE html>
<html ng-app="test">
<head>
<script data-require="angular.js@1.5.6" data-semver="1.5.6" src="https://code.angularjs.org/1.5.6/angular.min.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-controller="ctrl">
<h1>Hello Plunker!</h1>
<select ng-model="user.item_id">
<option ng-selected="i.id == user.item_id" ng-repeat="i in items" value={{i.id}}>{{i.name}}</option>
</select>
</body>
</html>
JS:
var module = angular.module("test", []);
module.controller('ctrl', function($scope){
$scope.items = [
{id: 1, name: 'foo'},
{id: 2, name: 'bar'},
{id: 3, name: 'baz'},
];
$scope.user = {};
$scope.selectedItem = {id: 1};
$scope.user.item_id = $scope.selectedItem.id;
});
Plunker:https://plnkr.co/edit/7oi4KwzMhGi3kdltSklg?p=preview
问题:如果您检查select
的html代码,您会看到HTML selected
属性已正确放置。
但是,它并未显示为突出显示的选项。为什么呢?
==编辑==
那个plunker代码在角度1.3.20上按预期工作,但它在1.4.x或1.5.x中被破坏
工作人员:https://plnkr.co/edit/0ApQeZ6Kar2yQisELXfT?p=preview
== EDIT2 ==
我已经在angularjs队列上发出了一张票:https://github.com/angular/angular.js/issues/14876#issuecomment-231010972
基本上,他们说我们应该坚持使用ngOptions,尽管他们不知道为什么ngSelected会被破坏。
答案 0 :(得分:5)
好吧,你可以改用ng-options ......
<select ng-model="user.item_id" ng-options="i.id as i.name for i in items">
</select>
答案 1 :(得分:0)
我没有看到这适用于你提到的任何版本。无论如何,检查这个plunker
https://plnkr.co/edit/V0ybr70kRpkcaxLKBHTK?p=preview
你编写select的方式,我可以在任何输入上重现相同的东西。原因是因为角度绑定不起作用,你的选择对他的模型一无所知,除非你改变模型(即使用ng-init
)。
使用这种方式:
<option ng-selected="i.id == user.item_id" ng-repeat="i in items" value={{i.id}}>{{i.name}}</option>
并不意味着您的模型会更新,它只会更新dom元素。