一尘不染

AngularJS-是否可以更改链接或编译中指令上的ngModel属性的值?

angularjs

我正在尝试创建一个指令,该指令将基于属性值将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返回未定义。

是否有可能完成我想做的事情?

编辑:

似乎该ngModel属性已在HTML上设置,但未在表单中注册,或者未实例化ngModelController。如果查看ngModel范围内的值,则在修改输入时它不会更改。


阅读 228

收藏
2020-07-04

共1个答案

一尘不染

通过使用模板功能,我能够实现目标。我认为它在链接函数中不起作用,因为它是在收集所有指令之后发生的,因此编译器无法识别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;
      }
    };
  });
2020-07-04