我正在尝试创建一个指令,该指令将基于属性值将ngModel属性添加到标签。例如:
angular.module('myModule'). directive('myDirective', function() { return { link: function(scope, elem, attrs) { var modelName = 'myPrefix.' + attrs.name; attrs.$set('ngModel', modelName); } }; });
这样的HTML:
<input name="foo" my-directive></input>
被编译成
<input name="foo" ng-model="myPrefix.foo" my-directive></input>
它采用输入的名称,附加一个前缀,并将ngModel属性设置为该值。
当我尝试在链接函数中执行此操作时,似乎input未在formController中进行注册,因此form.foo返回未定义。
input
form.foo
是否有可能完成我想做的事情?
编辑:
似乎该ngModel属性已在HTML上设置,但未在表单中注册,或者未实例化ngModelController。如果查看ngModel范围内的值,则在修改输入时它不会更改。
ngModel
通过使用模板功能,我能够实现目标。我认为它在链接函数中不起作用,因为它是在收集所有指令之后发生的,因此编译器无法识别ngModel已添加指令。我不确定为什么它在编译功能中不起作用(即使我将优先级设置为100)。
这是指令的工作版本:
angular.module('myModule'). directive('myDirective', function() { return { replace: true, template: function(elem, attr) { var newElem = '<input ng-model="model.' + attr.name + '">'; return newElem; } }; });