I have a Model that takes an object that could contain any set of properties.
我有一个Model,它接受一个可以包含任何属性集的对象。
I am wondering if I can bind to each object property, without knowing the property values ahead of time.
我想知道我是否可以绑定到每个对象属性,而不提前知道属性值。
Take this for example
以此为例
var object1 =
{
Name: '1',
Identifier: '12345',
Password: 'password'
}
var object2 =
{
Name: '2',
Identifier: 'object_two'
}
var objects = [object1,object2];
My objects can have different and unique properties, and I'd like to bind this to a form.
我的对象可以具有不同且唯一的属性,我想将其绑定到表单。
I know I can use a for (var property in object) and iterate through each object -- But can I do the same thing with AngularJS binding?
我知道我可以使用for(对象中的var属性)并遍历每个对象 - 但是我可以使用AngularJS绑定做同样的事情吗?
I wanted to do something along the lines of:
我想做一些事情:
<ul><li ng-repeat="attrib in obj">
{{attrib}}
</li</ul>
Edit: Thanks to the answer below I have gotten a little further. I can't seem to achieve two-way binding with this. This fiddle illustrates what I am trying to do:
I essentially want to bind using something like this:
我本质上想要使用这样的东西绑定:
<p ng-repeat="(key,value) in obj">
{{key}} : <input ng-model="obj[key]" />
</p>
This works, except that I can only enter one character at a time -- interesting.
这是有效的,除了我一次只能输入一个字符 - 有趣。
Final Edit: I found an acceptable alternative in case anyone else has this problem. I wasn't able to bind directly to an object without some issues, but i WAS able to bind to an array like the docs state in the answer below.
The following fiddle accomplishes what I need to do, while being only slightly more verbose.
以下小提琴完成了我需要做的事情,而只是稍微冗长一点。
function ctrl($scope) {
$scope.objects =
[
[
{Name: 'Name:', Value: 'Joe'},
{Name: 'Identification', Value: '1'},
{Name: 'Password', Value: 'secret'}
],
[
{Name: 'Name:', Value: 'Jane'},
{Name: 'Identification', Value: '2'},
{Name: 'Weather', Value: 'Sunny'}
]
];
// $scope.setSelected = ?????;
}
<div ng-app>
<div ng-controller="ctrl">
Objects
<ul>
<br/>
Listing of properties:
<br/>
<li ng-repeat="obj in objects" class="swatch">
{{obj}}
<p ng-repeat="prop in obj">
{{prop.Name}}: <input ng-model="prop.Value" /></p>
</li>
</ul>
</div>
</div>
This allows me to define an arbitrary set of arguments, but still bind without issues using angular.
这允许我定义一组任意参数,但仍然使用angular绑定没有问题。
1 个解决方案
#1
10
No problem:
<li ng-repeat='(key, value) in obj'>
{{key}} : {{value}}
</li>
It's in the docs as well: http://docs.angularjs.org/api/ng.directive:ngRepeat
它也在文档中:http://docs.angularjs.org/api/ng.directive:ngRepeat
#1
10
No problem:
<li ng-repeat='(key, value) in obj'>
{{key}} : {{value}}
</li>
It's in the docs as well: http://docs.angularjs.org/api/ng.directive:ngRepeat
它也在文档中:http://docs.angularjs.org/api/ng.directive:ngRepeat