$ scope。$ on不更新控制器属性AngularJS

时间:2014-07-16 00:50:05

标签: angularjs cordova

我有一个Angular / Ionic应用程序,它使用Network Phonegap API来检查网络连接。我已经定义了事件处理程序来处理在线/离线事件。发生这些事件时,我通过$rootScope $broadcast方法广播事件。在我的控制器中,我使用$on方法监听此事件并更新范围属性。 scope属性绑定到视图以在没有Internet连接时禁用按钮。问题是即使触发了离线/在线事件(在我的Samsung S3上测试),也没有设置范围属性。 为清晰起见,我的代码是:

document.addEventListener("offline", function() {
    //broadcast offline event to controllers
    $rootScope.$broadcast("networkStatusChange", 'Offline');
}, false);

document.addEventListener("online", function() {
    $rootScope.$broadcast("networkStatusChange", 'Online');
}, false);

我的控制器

$scope.$on('networkStatusChange', function(event, status) {
    $scope.networkInfo.isOffline = status === 'Offline' ? true : false;
});

$scope.networkInfo = {}; //bound to view to disable button is isOffline is true

我的观点

<p class="error" ng-show="networkInfo.isOffline">No Internet Connection.</p>

当我打开/关闭手机的互联网连接时,我不知道为什么networkInfo.isOffline属性没有改变。

2 个答案:

答案 0 :(得分:0)

我认为你必须确保你的addEventListener函数中的其他函数调用它。 有一个例子test demo

答案 1 :(得分:0)

您很可能需要在子功能中调用$scope.$apply()

$scope.$on('networkStatusChange', function(event, status) {
    $scope.networkInfo.isOffline = status === 'Offline' ? true : false;
    $scope.$apply();
});