如何从javascript设置ng-model名称?
HTML
<div ng-repeat="model in models">
<input ng-model="?">
</div
JS
$scope.models= [
{name: "modelOne"},
{name: "modelTwo"},
{name: "modelThree"}
];
非常感谢您的回答。
答案 0 :(得分:4)
<div ng-repeat="model in models">
<input ng-model="model.name">
</div>
ng-repeat
遍历您的models
数组,并在每次迭代时在您的范围中添加model
项。在ng-repeat
内的HTML中,您可以使用model
,就好像已将其从控制器中放入$scope
。
随时阅读更多documentation about ng-repeat
如果$scope.models
应该是属性名称列表,例如你想要实际编辑$scope.modelOne
而不是字符串modelOne
本身(在第二次阅读时我认为可能是你是什么意思),你不能直接这样做,但你可以在两者之间使用一个对象,即编辑$scope.foo.modelOne
而不是$scope.modelOne
<div ng-repeat="model in models">
<input ng-model="foo[model.name]">
</div>
在您的控制器中
$scope.foo = {
'modelOne': 'some text',
'modelTwo': 'some other text',
'modelThree': 'hello world'
}
答案 1 :(得分:1)
根据您问题中的代码,您似乎希望每个<input>
都拥有models
数组中列出的模型之一。如果是这样,只需:
<div ng-repeat="model in models">
<input ng-model="model.name">
</div>
答案 2 :(得分:1)
如果你的目标是通过在变量中提供相应的模型名称来设置ngModel
,那么你仍然可以使用古老的bracket notation轻松实现它。
所以说你有变量$scope.modelName = 'modelOne'
并且你想设置模型,这样你就可以在模板中使用{{modelOne}}
或在控制器中使用$scope.modelOne
。如果使用括号表示法,则非常容易。在这种情况下,它将是$scope[$scope.modelName] = 'something'
。
在您的情况下,ngRepeat
有一个警告,因为每次迭代都会创建自己的子范围,因此为了在适当的范围内设置模型,您需要使用$parent
对初始范围的引用。所以它将是:
<div ng-repeat="model in models">
<input ng-model="this.$parent[model.name]">
</div>
所以关键在于this
在ngWhatever总是指向范围对象(控制器中的$scope
)。由于它是一个对象,您只需使用bracket notation来访问具有变量名称的属性。