Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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
Javascript 触发ng show仅适用于ng click事件_Javascript_Angularjs_Socket.io - Fatal编程技术网

Javascript 触发ng show仅适用于ng click事件

Javascript 触发ng show仅适用于ng click事件,javascript,angularjs,socket.io,Javascript,Angularjs,Socket.io,我想将一个变量绑定到ng show,现在它只适用于click事件。例如,我使用的是socket.io,我希望当服务器向客户端发送消息时,该变量会发生变化,然后触发ng show,但它不起作用!只有当我单击并触发ng click事件时,我才知道所需的绑定是有效的。有什么问题吗 这是我的控制器,在这段代码中,我捕获服务器消息和控制台。log工作并打印TRUE,但ng show中没有任何内容。下一次我点击按钮时,它工作了!我不明白为什么 app.controller("mainCtrl", funct

我想将一个变量绑定到
ng show
,现在它只适用于click事件。例如,我使用的是
socket.io
,我希望当服务器向客户端发送消息时,该变量会发生变化,然后触发
ng show
,但它不起作用!只有当我单击并触发
ng click
事件时,我才知道所需的绑定是有效的。有什么问题吗

这是我的控制器,在这段代码中,我捕获服务器消息和控制台。log工作并打印TRUE,但
ng show
中没有任何内容。下一次我点击按钮时,它工作了!我不明白为什么

app.controller("mainCtrl", function($scope){
$scope.loading=false;
$scope.socket = io.connect('http://localhost:8080');

$scope.getNewEvent = function(){
    $scope.socket.emit('getNewEvent');
};

//here i catch server messages
$scope.socket.on('setNewEvent', function(data){
    $scope.loading = true; //loading variable changes but not effects ng-show
    console.log($scope.loading);
});
});
这是我的HTML:

<div class="loading" ng-show="loading">Loading... {{loading}}</div>
正在加载。。。{{loading}}

您需要应用范围更改,因为Angular不知道socket事件对模型所做的任何更改(它发生在Angular摘要生命周期的“外部”):

$scope.socket.on('setNewEvent', function(data){
    $scope.loading = true;
    $scope.$apply();
});