使用表单控制器引用动态命名的表单控件

时间:2014-06-29 20:53:18

标签: angularjs

我有这样的事情(注意这是一个人为的例子):

<form name="myForm">
  <input name="{{'myInput'}}" ngModel="data.myInputModel">
</form>

我希望像这样引用它:

$scope.myForm.myInput

但这不起作用,而是通过$addControl(ngModelController)内部角度注册控件,其中ngModelController对象如下所示:

{
  $name: "{{'myInput'}}"
  ...
}

虽然我预料到了这一点:

{
  $name: "myInput"
  ...
}

我将在下面发布我的解决方法作为答案,但我想知道是否有更好的方法来解决这个问题?


更新: Something similar to this has been asked before,但提供的答案并非特别有用。我的回答可能对寻找替代方法的人有用。

1 个答案:

答案 0 :(得分:0)

以下是我的解决方法:

.directive('dynamicName', function () {
  return {
    require: ['^form', 'ngModel'],
    link: function (scope, element, attrs, ctrls) {
      var formCtrl = ctrls[0],
          ngModelCtrl = ctrls[1];

      ngModelCtrl.$name = attrs.dynamicName;
      formCtrl.$addControl(ngModelCtrl);
    }
  }
})

我这样使用它:

<input dynamic-name="{{'myInput'}}" />