我想在链接功能中访问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 ..从编译函数返回
答案 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);
如果你想在编译函数中调用这三行。