gpt4 book ai didi

javascript - 为什么没有为指令中的 ng-options 设置空白选项

转载 作者:行者123 更新时间:2023-11-30 17:21:51 28 4
gpt4 key购买 nike

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

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

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

Demo on 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}
];
}
};
}]);

最佳答案

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

因为您只是使用字符串,所以您应该使用预链接函数,在其中通过 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="" 捕获了第一个 child 。作为空节点 ( source ref )。然后稍后它清除选择的内容并动态添加相关的<option>。标签 ( source ref )

关于javascript - 为什么没有为指令中的 ng-options 设置空白选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25026702/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com