Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AngularJS: Bind to all object properties?

I have a Model that takes an object that could contain any set of properties.

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?

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:

http://jsfiddle.net/EpqMc/17/

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.

http://jsfiddle.net/8ENnx/9/

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.

like image 643
Yablargo Avatar asked Sep 25 '13 18:09

Yablargo


1 Answers

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

like image 60
tymeJV Avatar answered Oct 23 '22 04:10

tymeJV