gpt4 book ai didi

angularjs - 如何根据属性值修改 AngularJs 指令模板?

转载 作者:行者123 更新时间:2023-12-02 03:27:26 24 4
gpt4 key购买 nike

我有一个基于 Angular Bootstrap typeahead 构建的下拉指令。

我希望指令的使用者能够提供一个属性(限制到列表)来确定用户输入是否仅限于列表成员。在 uib-typeahead 指令中,这是通过设置 typeahead-editable 属性“true”或“false”来实现的

因为我的指令封装了生成下拉列表的uib,所以我需要更改指令的模板以相应地改变其行为,但我不知道如何做到这一点。我尝试修改指令的 return 子句中的字符串模板,但这不起作用,我猜是因为在处理返回函数之前读取了模板的值?

这是指令:

angular.module("app").directive("dropDown",  function () {
var mt=mydropdowntemplate;

return {
link: function (scope, element, attrs) {
var limitToList = attrs["limit-to-list"]=="false";
var editable = !limitToList;
if (editable) {
mt=mt.replace("typeahead-editable='false'","typeahead-editiable='true'");
}
console.log("template: " + mt )
var list = scope[attrs["list"]];
var length=list.length
var valueName = attrs["value"];
var idName = attrs["key"];
},
template: mt //This has the value of mt prior to the replace function above
}
})

通过查看页面,我可以看到实际使用的模板是在结果 block 中应用更改之前的模板。

Plunker link

最佳答案

link 函数不适合修改模板,因为它是在模板编译后执行的。而是使用模板属性的函数形式修改模板:

angular.module("app").directive("dropDown",  function () {
var mt=mydropdowntemplate;

return {
link: function (scope, element, attrs) {
var list = scope.$eval(attrs.list);
var length=list.length
var valueName = attr.value;
var idName = attrs.key;
},
template: function (tElem, tAttrs) {
var limitToList = tAttrs.limitToList=="false";
var editable = !limitToList;
if (editable) {
mt=mt.replace("typeahead-editable='false'","typeahead-editiable='true'");
}
console.log("template: " + mt )
return mt;
}
}
})

有关详细信息,请参阅 AngularJS Comprehensive Directive API Reference - template .

关于angularjs - 如何根据属性值修改 AngularJs 指令模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52845240/

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