我想将变量绑定到ng-show
,现在它只适用于click事件。例如,我使用socket.io
,我希望当服务器向客户端发送消息时,该变量会发生变化,然后触发ng-show
,但它不起作用!只有当我点击并触发ng-click
事件时,我希望绑定有效。有什么问题?
这是我的控制器,在此代码中我捕获服务器消息,console.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>
答案 0 :(得分:3)
您需要应用范围更改,因为Angular不知道有关通过套接字事件对模型所做的更改(它发生在Angular摘要生命周期的“外部”):
$scope.socket.on('setNewEvent', function(data){
$scope.loading = true;
$scope.$apply();
});