Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs ng重复不动态添加新项目_Angularjs_Socket.io_Angularjs Ng Repeat - Fatal编程技术网

Angularjs ng重复不动态添加新项目

Angularjs ng重复不动态添加新项目,angularjs,socket.io,angularjs-ng-repeat,Angularjs,Socket.io,Angularjs Ng Repeat,我是Angular JS(1)的新手,我对ng repeat有问题。我将socket.io与Angular一起使用。这是我的控制器: var messagingApp = angular.module('messagingApp', []); function mainController($scope) { var socket = io.connect(); socket.on('message', function(data){ $scope.users

我是Angular JS(1)的新手,我对ng repeat有问题。我将socket.io与Angular一起使用。这是我的控制器:

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);
我可以看到它正在那个on块中运行(通过console.log)。但是,它没有向前端显示任何内容。我的前端如下所示:

<body ng-controller="mainController">

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

{{user.Name}


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

在推送到阵列后添加$scope。$apply()。因为您正在更新角度范围之外的模型。所以angularjs不知道模型已经更新了。有关$scope.$apply的详细信息

在推送到数组后添加$scope.$apply()。因为您正在更新角度范围之外的模型。所以angularjs不知道模型已经更新了。有关$scope的详细信息。$apply

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

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

{{user[$index].Name}

或者试试这个

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>
socket.on('message',函数(数据){
$scope.users.data.push({'Name':'yeh});
log($scope.users.data);
});
$scope.users={data:[]};
{{user.Name}


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

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

{{user[$index].Name}

或者试试这个

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>
socket.on('message',函数(数据){
$scope.users.data.push({'Name':'yeh});
log($scope.users.data);
});
$scope.users={data:[]};
{{user.Name}


Add$scope.$apply()在推送到数组之后。@Raj是的,就是这样!把它作为正确的答案贴出来,我会接受的。那么,美元是什么呢。它是否通知前端模型中的某些内容已更改?我们是否只在执行异步操作时使用$apply,还是在模型发生更改时使用$apply?在推送到数组后添加$scope.$apply()。@Raj是的,就是这样!把它作为正确的答案贴出来,我会接受的。那么,美元是什么呢。它是否通知前端模型中的某些内容已更改?我们是否只在执行异步操作时使用$apply,还是在模型发生更改时才使用$apply?