1

我正在尝试创建一个 AngularJS 指令来管理<select>输入的提示。3种不同的模式如下:

  1. 不允许空白选项
    • 这是默认行为
  2. 允许没有文本的空白选项
    • 通过设置allow-blank="true"指令实现
  3. 允许带有提示文本的空白选项
    • 通过设置allow-blank为除"true"

但是,空白选项永远不可用。

Plunker 上的演示

模板

<select ng-options="tag.id as tag.name for tag in myTags">
  <option ng-if="allowBlank === 'true'" value=""></option>
  <option ng-if="allowBlank && allowBlank !== 'true'" value="">{{allowBlank}}</option>
</select>

指示

myApp.directive('mySelector', ['$http', function($http) {
  return {
    templateUrl:'my-selector-template.html',
    restrict: 'E',
    scope: {
      allowBlank: '@?'
    },
    replace: true,
    controller: function ($scope) {
      $scope.myTags = [
        {"name":"aliquam in","id":1},
        {"name":"massa velit","id":2},
        {"name":"nec vestibulum","id":3}
      ];
    }
  };
}]);
4

1 回答 1

2

问题是 的内容select嵌入了(见下文)。如果您检查输出的元素,您甚至看不到您在其中定义的选项标签。

由于您只是使用字符串,因此您应该使用预链接函数,在其中通过 javascript 添加正确的选项。下面的代码应该可以解决问题(Forked Plunk)。

link: {
  pre: function(scope, element, attrs){
    if(attrs.allowBlank === 'true') element.append('<option value=""></option>');
    else if(attrs.allowBlank && attrs.allowBlank !== '') element.append('<option value="">' + attrs.allowBlank + '</option>');
  }
}

编辑select 不会“包含”它的内容,因为@lightswitch05 指出 select 指令将第一个子value=""节点作为空节点(source ref)。然后稍后它会清除 select 的内容并动态添加相关<option>标签(source ref

于 2014-07-30T01:24:56.030 回答