javascript - $rootScope 并不每次都更新

标签 javascript angularjs ionic-framework

当互联网不可用时,我想在每个页面上显示互联网不可用栏。

我正在使用 Ionic 框架,因此决定将代码保留在 menu.html 上

这是我的菜单 html 代码

<div class="cfg-internet-error text-center text-bold" ng-hide="$root.internet_active">Internet not available</div>

我正在 .run 上设置 $rootScope

 $rootScope.internet_active = navigator.onLine;
    window.addEventListener("online", function() {
        $rootScope.$broadcast('isOnline', true);
        $rootScope.internet_active = true;
    }, true);

    window.addEventListener("offline", function() {
        $rootScope.$broadcast('isOnline', false);
        $rootScope.internet_active = false;
    }, true);

发生的情况是,如果互联网断开连接,它会显示该栏,但当它再次回来时,它不会隐藏它,我也尝试过 ng-if ,当我更改页面时,它会隐藏回来,所以我想要真实的当值发生变化时,数据与 View 的绑定(bind)时间也应该改变 View 值

最佳答案

两个注意事项:

  1. 使用 Angular 包装器 $window .
  2. 区分开发(PC)和生产(原生)环境。

例如:

var state,
    online = 'online',
    offline = 'offline';

if (ENV === 'production') {
    if ($cordovaNetwork.isOnline()) {
        state = online;
    }
    if ($cordovaNetwork.isOffline()) {
        state = offline;
    }
}
else if (ENV === 'development') {
    if (navigator.onLine) {
        state = online;
    }
    else {
        state = offline;
    }
}

addEventListener(online);
addEventListener(offline);

function addEventListener(status) {
    $window.addEventListener(status, function () {
        state = status;
        if (state === online) {
            // $rootScope.$broadcast("network online");
        }
        else if (state === offline) {
            // $rootScope.$broadcast("network offline");
        }
    }, false);
}

Cordova 插件 url .

关于javascript - $rootScope 并不每次都更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32553052/

相关文章:

javascript - 实现动态侧边栏,可根据特定操作进行刷新

json - AngularJS 多维数组

ionic-framework - 我可以在 CapacitorJS 应用程序中使用 AdSense 在所有 3 个平台 : Web, iOS 和 Android 上展示广告吗?

angular - 在 Ionic 2 应用程序中安装 ng2-translate 库

javascript - 无法在某个点停止进度条

javascript - 如何异步删除多个文件?

javascript - 为什么 Javascript 中这些返回数组的方式不同?

javascript - 如何在javascript字符串中的某个字符周围添加空格?

javascript - 访问 AngularJS 中的全局 javascript 变量

android - ionic 3 : more than one library with package name 'com.google.android.gms.license'