我正在尝试创建一个AngularJS指令来管理<select>
输入的提示。 3种不同的模式如下:
allow-blank="true"
来实现
allow-blank
设置为"true"
但是,空白选项永远不可用。
<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}
];
}
};
}]);
答案 0 :(得分:2)
问题是select
的内容是被转换(见下文)。如果检查输出的元素,您甚至看不到内部定义的选项标记。
由于您只是使用字符串,因此您应该使用预链接功能,在其中通过javascript添加正确的选项。以下代码应该可以解决问题(分叉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) 。然后它会清除选择内容并动态添加相关的<option>
代码(source ref)