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

时间:2015-05-30 11:12:01

标签: javascript angularjs socket.io

我想将变量绑定到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>

1 个答案:

答案 0 :(得分:3)

您需要应用范围更改,因为Angular不知道有关通过套接字事件对模型所做的更改(它发生在Angular摘要生命周期的“外部”):

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