我有这样的事情(注意这是一个人为的例子):
<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,但提供的答案并非特别有用。我的回答可能对寻找替代方法的人有用。
答案 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'}}" />