我有一个这样的自定义指令:
app.directive('myInput', function() {
return {
priority: 110,
restrict: 'E',
replace: true,
transclude: true,
scope: true,
template: function(elem, attr){
return '<div><input type="text" ng-model="'+attr["model"]+'" /></div>';
},
controller: function(){
},
compile: function(tElem, tAttrs){
// = compile
// = link
return {
// pre-link
pre: function(scope, elem, attr, ctrl, transclude){
},
// post-link
post: function(scope, elem, attr, ctrl, transclude){
}
}
},
};
});
为此,我想在HTML中使用<myInput model="..."></myInput>
标签。 (当然会有更大的logik,但这是问题的核心)
到目前为止,一切都很好。仅此一项即可正常工作。
例如:
HTML用户:<myInput model="test"></myInput>
通话中决赛:<div><input type="text" ng-model="test" /></div>
但是现在我希望用户可以将属性添加到myInput
标记中。属性,指令不知道。该指令应将此属性添加到实际的输入标签中。
此示例中的内容:
HTML用户:<myInput model="test" someAttr="bla" moreAttr="blub"></myInput>
通话中决赛:<div><input type="text" ng-model="test" someAttr="bla" moreAttr="blub" /></div>
也在工作。
但是现在我使用uiMask
中已经存在的属性。
例如:
HTML用户:<myInput model="test" someAttr="bla" ui-mask="999"></myInput>
通话中决赛:<div><input type="text" ng-model="test" someAttr="bla" ui-mask="999" /></div>
但这不起作用。
在控制台中,uiMask
指令责怪ngModel
不存在。
但是在我的指令中设置了ngModel
是因为用户生成的原始html代码中不存在它。
但是在uiMask中,主要代码位于compile函数中,而AngularJS首先执行所有编译函数。然后是前链接,后链接和模板。独立于优先级(uiMask的优先级为100,因此我尝试将优先级设置为110)。
那么在uiMask启动之前,我该怎么做才能首先呈现指令模板?这样我的指令可以设置uiMask需要的ngModel?