我的问题很常见。我看到了许多与我有相似问题的人的不同案例,但我仍然没有答案。
[我的目标]
我想实现一个独立的指令来封装由label(span)和value(input)组成的div。这里有一些值得一提的细节:
[我的方法]
我正在使用指令编译阶段来操纵指令的HTML(主要是为指令的模板HTML添加属性)。在预链接阶段,我想操纵指令正在使用的范围,以便将指令的占位符添加到我想要的范围,并在需要时为其分配一些默认值。 (我想我可以通过ng-init实现这一点而不是弄乱范围,但我相信这与我的问题无关。)
[我做了什么]
正如我上面解释的,我有一个函数(determinePlaceholderName()),它返回一个字符串,这是我想要分配给ngModel的确切值。例如:
$parent.$parent.$parent.placeHolderName
我想将该函数分配给输入的ng-model属性,假设Angular将其作为表达式进行处理,对其进行评估并生成我期望的结果。以下是我分配ng-model属性的方法:
compile: function(cElem, cAttrs) {
//Some non relevant code here ....
$(cElem[0]).find("div input").attr("ng-model", "determinePlaceholderName()");
}
基本上我期望将其视为:
$(cElem[0]).find("div input").attr("ng-model", "$parent.$parent.$parent.placeHolderName");
[关于determinePlaceholderName()]
我在我的指令的链接函数中定义了这个函数:
link: function ($scope) {
$scope.constructValuePlaceholderName = function() {
//Some logic here.
return result;
}
[我的问题]
最后我的问题是什么。
Angular导致错误向我解释
<input ng-model="myFunc()">
是文档中不可分配的表达式。
[我的问题]
如果Angular ??
感谢您的时间!
答案 0 :(得分:2)
我希望这是你正在寻找的东西:
http://plnkr.co/edit/TojgLNx3TUbmszhfs8Ui?p=preview
使用隔离范围,您可以传递模型的名称,并且指令本身不知道模型实际所在的范围或其名称,但能够按原样使用它并将其提供给ngModel。 / p>
如果您不想使用隔离范围或想要使用某个功能,那么该plunker还提供了替代方案。