编译前AngularJS触发器模板

时间:2018-09-17 10:59:18

标签: angularjs directive

我有一个这样的自定义指令:

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?

0 个答案:

没有答案