Augustian
Augustian

Reputation: 13

Angularjs is not displaying update data in table row, ng-repeat not working properly?

I'm trying to get Angular to display JSON data that I've managed to pull from a database and console also printing the data as expected, but table ng-repeat not displaying the data. even outside of the table data display properly.

{{contactlists[0].name}}

<!DOCTYPE>
<html ng-app="nodeapp">

<head>
    <title>AngularJs with Nodejs</title>
    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">

    <!-- Optional theme -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
</head>

<body>
    <div class="container" ng-controller="nodeappctrl">
        <div class="row">
            <h1>Angularjs with api's</h1>
            <p>{{contactlists[0].name}}</p>
        </div>
    </div>
    <div class="container">
        <div class="row">
            <table class="table">
                <thead>
                    <tr>
                        <th>SNo</th>
                        <th>Name</th>
                        <th>Email</th>
                        <th>Phone</th>
                    </tr>
                </thead>
                <tbody>
                    <tr ng-repeat="contact in contactlists">
                        <td>{{$index}}</td>
                        <td>{{contact.name}}</td>
                        <td>{{contact.email}}</td>
                        <td>{{contact.number}}</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>
    <script src="https://code.angularjs.org/1.4.9/angular.min.js"></script>
    <script type="text/javascript">
        var nodeapp = angular.module('nodeapp', []);

        nodeapp.controller('nodeappctrl', ['$scope', '$rootScope', '$log', '$http',
            function($scope, $rootScope, $log, $http) {
                var contactlist = {};
                $http.get('/contactlist').success(function(data) {
                    $scope.contactlists = data;
                    //$scope.$apply();
                    console.log(JSON.stringify($scope.contactlists), null,2);
                });
            }
        ]);
    </script>

    <!--
    // dummy data
    var contactlists =[
        {
            name: 'Rajesh',
            email: '[email protected]',
            number: '11 - 111 - 11111'
        }, {
            name: 'Rajesh2',
            email: '[email protected]',
            number: '22 - 222 - 222222'
        }, {
            name: 'Rajesh3',
            email: '[email protected]',
            number: '33 - 333 - 333333'
        }
    ]-->

</body>
</html>
</html>

Upvotes: 1

Views: 772

Answers (2)

Surjeet Bhadauriya
Surjeet Bhadauriya

Reputation: 7156

Place ng-controller inside the <body> tag. You used it in the <div> which is closed, so it's can't be available to the rest bottom of the code.

<body ng-controller="nodeappctrl">

//your code here..

</body>

Upvotes: 3

George Kagan
George Kagan

Reputation: 6124

The problem is here:

<div class="container" ng-controller="nodeappctrl">

The nodeappctrl controller should be applied to a tag that is a parent of where you're accessing its scope. As you can see, the table is a child of a sibling of the element the controller is bound to.

For example, move ng-controller="nodeappctrl" to the body tag.

Upvotes: 1

Related Questions