【发布时间】:2014-12-19 05:00:35
【问题描述】:
我有一个自定义元素指令,例如如下所示
<my-wrapper ng-model="values.abc" unique-check="" list="list" prop="name"> </my-wrapper>
该指令确实需要 ng-model,稍后将在内部输入标签上设置它
<input type="text" name="myfield" ng-model="'+attrs.ngModel+'"/>
发生的问题是当我检查控制台时,我可以看到指令上的 ng-model 与输入标签上的 ng-model 不同。
如何确保未创建外部标记上的 ng-model 并且它仅在我的指令中创建一次。
我的指令代码如下
app.directive("myWrapper", function(){
var templateFn = function(element, attrs){
return '<div ng-form="myform">'+
'<input type="text" name="myfield" ng-model="'+attrs.ngModel+'"/>'+
'<span>(inside directive) : isDuplicate:{{myform.myfield.$error.isDuplicate}}</span>'
'</div>';
}
return {
restrict :'E',
template : templateFn,
require: 'ngModel',
scope: true
}
});
请注意,以上只是我的指令的简化版本,我保留了 scope: true 因为整体场景的要求。
如果不清楚我在说什么,请查看THIS PLUNKER的控制台
我尝试了使用terminal : true 和/或priority : 1001 的解决方案,以便不会在指令html 上创建ng-model,而是仅在输入标签上创建ng-model,但它们都不起作用。
是的,一种解决方案是用指令上的 my-model 替换 ng-model,然后在输入标签上再次将其添加为 ng-model,但随后它在我的应用程序中的近 1000 个地方使用,所以真的不想这样替换它。
解决此问题的任何其他方法。
【问题讨论】:
-
会不会是缺少
</div>? (长镜头,我知道...)还尝试将优先级设置为 0 以外的值。(priority: 0是默认值,但是当最后一步发生时,链接函数中的时机很棘手,优先级是反向运行的。)如果你做了一个 plunker,它可能更容易调试。 -
感谢您指出这一点,上面的代码只是一个人为的例子。将相应地更新问题...
-
据我所知,不幸的是,您将不得不使用 my-model 选项。
-
@CorySilva 创建了 plunker...
-
我对 Angular 真的很陌生,但试图弄清楚开发人员在堆栈世界中使用 Angular 所做的所有事情,并遇到了这个问题。不确定我是否正确理解了这个问题,但为什么我们不能只使用链接功能来删除属性?在删除它之前,只需保留该值。如果我错了,请告诉我。
标签: angularjs angularjs-directive