试试我的自定义指令:
myApp.directive("dynamicName",function($compile){
return {
restrict:"A",
terminal:true,
priority:1000,
link:function(scope,element,attrs){
element.attr('name', scope.$eval(attrs.dynamicName));
element.removeAttr("dynamic-name");
$compile(element)(scope);
}
};
});
用它:
<input dynamic-name="field.name"
type="{{ field.type }}"
placeholder="{{ field.name }}"
ng-model="field.value"
required>
演示
问题说明:
默认情况下,输入元件使用ngModelController( ng-model
)调用FormController.$addControl
时它们与注册其自身,并在暴露的属性FormController
与输入的名称属性是{{ field.name }}
在这种情况下。因此,即使控制已注册,但你没有暴露在性能FormController
与命名的email
,firstName
你只需要{{ field.name }}
引用的最后一个输入项
解决方案说明:
在这个解决方案中,我创建了一个自定义指令来{{ field.name }}
在运行时用正确的名称替换。
有关为什么我必须使用terminal:true,
and 的更多信息priority:1000
,请查看此讨论:在 AngularJS 中从指令添加指令