【问题标题】:$scope.$on not updating controller property AngularJS$scope.$on 不更新控制器属性 AngularJS
【发布时间】:2014-07-16 10:17:57
【问题描述】:

我有一个 Angular/Ionic 应用程序,它使用 Network Phonegap API 检查网络连接。我已经定义了事件处理程序来处理在线/离线事件。当这些事件发生时,我通过$rootScope$broadcast方法广播事件。在我的控制器中,我使用$on 方法侦听此事件并更新范围属性。 scope 属性绑定到视图以在没有 Internet 连接时禁用按钮。问题是即使触发了离线/在线事件(在我的三星 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 属性没有改变。

【问题讨论】:

    标签: angularjs cordova


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2016-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-02
        • 1970-01-01
        • 1970-01-01
        • 2018-07-02
        • 2015-08-18
        相关资源
        最近更新 更多