ng-repeat不动态添加新项目

时间:2016-12-16 07:13:57

标签: angularjs socket.io angularjs-ng-repeat

我是Angular JS(1)的新手,我遇到了ng-repeat的问题。我正在使用带有Angular的socket.io。这是我的控制器:

var messagingApp = angular.module('messagingApp', []);

function mainController($scope) {

    var socket = io.connect();
    socket.on('message', function(data){
        $scope.users.push({'Name': 'yeh'});
        console.log($scope.users);
    });

    $scope.users = []; //if I put stuff here and comment out socket stuff, it shows in the front-end
};

messagingApp.controller('mainController',mainController);

我可以看到它在块内部(通过console.log)。但是,它没有向前端显示任何内容。我的前端如下:

<body ng-controller="mainController">

<div ng-repeat="user in users">
    <p>{{ user.Name }}</p>
</div>

我的理解是,如果您更改模型(在这种情况下是用户),它应该自动更新ng-repeat。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

在推送到数组后添加$ scope。$ apply()。因为您正在更改角度范围之外的模型。因此angularjs不知道模型已更新。更多关于$ scope。$ apply http://tutorials.jenkov.com/angularjs/watch-digest-apply.html

答案 1 :(得分:0)

您正在推送数组中的对象并尝试迭代Array。所以你应该指定位置。

<body ng-controller="mainController">
    <div ng-repeat="user in users">
        <p>{{ user[$index].Name }}</p>
    </div>

或尝试这个..

socket.on('message', function(data){
         $scope.users.data.push({'Name': 'yeh'});
        console.log($scope.users.data);
    });

     $scope.users = {data:[]};





<div ng-repeat="user in users.data">
        <p>{{ user.Name }}</p>
    </div>