【问题标题】:AngularJS - show/hide elements from rootscopeAngularJS - 从根范围显示/隐藏元素
【发布时间】:2013-10-24 04:06:43
【问题描述】:

我正在通过添加事件侦听器来侦听丢失网络连接的应用程序。

当应用下线时,我需要显示一条消息。

以下代码似乎对我不起作用。

我在应用程序的run方法中添加了事件监听器,使其全局可用:

document.addEventListener("offline", function() {
    $rootScope.offline = true;
}, false);

然后在我的 index.html 中,我根据 $rootScope 变量显示隐藏一条消息:

<div id="network-msg" ng-show="$root.offline">
    <div class="full-overlay" ng-show="$root.offline">
        <p class="txt-center">No internet connection</p>
        <p class="txt-center">Trying to re-connect</p>
    </div>
</div>

当我离线时,我可以看到变量正在更新,但消息没有显示。所以如果我输出:

{{$root.offline}}

在页面上我可以看到它正确地从 false 切换到 true,但仍然没有显示消息。

【问题讨论】:

    标签: javascript jquery angularjs show show-hide


    【解决方案1】:

    由于值在 dom 事件处理程序中更新,因此必须在 $apply 回调中完成更改

    document.addEventListener("offline", function() {
        $rootScope.$apply(function(){
            $rootScope.offline = true;
        })
    }, false);
    

    【讨论】:

    • 您能否详细说明标识更改的ng-model 指令与此处需要$apply 之间的区别?它也对我有用。我在run 处理程序中设置了一个$rootScope.$on,我可以让视图响应更改的唯一方法是使用它。我通过调用$scope.$emit FYI 提出了这一点。
    • @MichaelPerrenoud see thisthis 了解为什么需要 $apply 的基本概念
    • @MichaelPerrenoud 不确定您对$on()$emit() 的问题是否有问题……您能否解释一下问题...如果可能的话,请尝试在fiddle 中重新创建问题
    • 我有一个question here,它说明了我是如何使用它的。我添加了一个答案,因为您实际上回答了我的问题!顺便说一句,我 +1 了这个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2021-03-09
    相关资源
    最近更新 更多