angularjs指令链接函数未从compilefunction调用

时间:2014-02-24 08:38:42

标签: angularjs angularjs-directive

我想在链接功能中访问ngModelController。 我使用$ compile来根据用户选项动态生成html。 根据我需要从compileFunction返回链接函数的文档。

但是没有调用链接功能。 Plunker Link

我试图限制用户在type = number时输入字母。

修改

var compileFunction = function (element) {
        return function (scope, telem, tattr, ngModelCtrl) {
            console.log(ngModel);
            var template = helper.getFieldHtml(fieldHtml, scope.options);
            element.html(template);
            $compile(element.contents())(scope);
            return linkFunction.apply(scope, telem, tattr, ngModel);
        };
    };

return {
        scope: { options: '=', ngModel: '=' },
        required: ['ngModel', '^form'],
        restrict: 'E',
        compile: compileFunction
    };

如何在链接函数中访问ngModelCtrl ..从编译函数返回

3 个答案:

答案 0 :(得分:1)

您的编译函数已经返回一个函数(即链接函数):

var compileFunction = function (element) {           
    return function (scope) { // linking function


    };
};

您可以手动调用您的功能:

var compileFunction = function (element) {           
    return function (scope) { // linking function

       // ...

       linkFunction.apply(this, arguments);
    };
};

答案 1 :(得分:1)

您只需要替换“require”而不是“required”

 return {
            scope: { options: '=', ngModel: '=' },
            require: ['ngModel', '^form'],
            restrict: 'E',
            compile: compileFunction
        };

这是工作。

答案 2 :(得分:0)

按照你的定义

 var compileFunction = function (element) {
        return function (scope) {           //<- This is your link function
            ....
            return (linkFunction);          // not this
        };
    };

此外,我不认为范围可用于编译功能,因为您正在使用

 var template = helper.getFieldHtml(fieldHtml, scope.options);
 element.html(template);
 $compile(element.contents())(scope);

如果你想在编译函数中调用这三行。