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

Triggering ng-show works only with ng-click event

本文关键字:ng-click 事件 适用于 ng-show 触发      更新时间:2023-09-26

我想绑定一个变量到ng-show,现在它只适用于点击事件。例如,我与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>

你需要应用作用域更改,因为Angular并不知道socket事件对model所做的任何更改(它发生在Angular摘要生命周期之外):

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