ng选项的最后一个元素

Last element of ng-options

本文关键字:元素 最后一个 选项 ng      更新时间:2023-09-26

给定以下代码:

<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>(正如Joseph已经指出的)。一个可能的解决方案可能是使用有效值初始化控制器中的此作用域属性(someModel),但提供的数据(在本例中为ps)可能为空,因此不可能有初始化值。

我的第一种方法是知道选择渲染何时完成,这样我就可以删除额外的选项值,并随着模型的变化一次又一次地正确初始化selext框。

这真的可能吗?有更好的方法来实现这一点吗?

我可能错了,但我认为你想要的是这样的东西:

使用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>

示例

此外,值得一提的是,由于您使用的是需要jQueryselect2,因此您在指令中收到的element不是jqLite对象,而是jQuery对象,这就是为什么您可以在指令中执行element.select2()