给出以下代码:
<select label="someSelect"
ng-model="someModel"
ng-options="p as p.bar group by p.foo for p in ps">
</select>
有没有办法知道何时使用相应的选项值填充了选择?
我知道这可以在ng-repeat
指令中创建自定义指令并检查scope.$last
属性,但在这种情况下似乎不起作用。
这背后的想法是我希望能够使用Select2插件(http://ivaynberg.github.io/select2/)。由于someModel
与所提供选项的任何值都不匹配,因此ng-options
默认添加额外<option value="?"></option>
(正如Josep已经指出的那样)。可能的解决方案可能是使用有效值在控制器中初始化此范围属性(someModel
),但提供的数据(在这种情况下为ps
)可能为空,因此无法初始化值。 / p>
我的第一种方法是知道选择渲染何时完成,以便我可以删除额外的选项值并在模型更改时反复初始化selext框。
实际上可行吗?有没有更好的方法来实现这一目标?
答案 0 :(得分:2)
我可能错了,但我认为你想要的是这样的:
使用select2的指令(经验法则:当你想要集成外部插件时总是使用指令):
.directive('select2', function($timeout) {
return {
restrict: 'A',
link : function (scope, element, attrs ) {
$timeout(function(){element.select2();});
}
};
});
您的HTML:
<select
ng-init="studentSelected=students[0]"
ng-model="studentSelected"
ng-options="student.name group by student.class for student in students"
select2>
</select>
此外,值得一提的是,由于您使用的select2
需要jQuery
,因此您在指令中收到的element
不是jqLite
个对象,一个jQuery
对象,这就是你可以在指令中做element.select2()
的原因。