【问题标题】:Content briefly rendering then disappearing using ng-if使用 ng-if 短暂呈现然后消失的内容
【发布时间】:2017-01-11 14:06:29
【问题描述】:

我的页面上有一些内容包含在 ng-if 中,如下所示:

            <div ng-if="ShowMessgae" class="text-danger">
                <p>
                    <strong>
                        Message displayed to User
                    </strong>
                </p>
            </div>

然后在我的 Angular js 控制器中,我有以下内容:

function MyController($scope, $q, notifyHelper) {
    openAjaxLoaderGif();

    $scope.ShowMessgae = false;

    MyService.getVarsFromSession().then(function (result) {
       // some code removed for brevity
       if(some coditional) {
        $scope.ShowMessgae = true;
       }

        }, function (data, failReason, headers) {
            notifyHelper.error("Error has occurred - try again");
        })
    })
    .finally(function () {
        closeAjaxLoaderGif();
    });
};

我将 ShowMessage 的值设置为 false,并且仅在满足特定条件时才为 true。在大多数情况下,ShowMessage 将是错误的。但是,这会导致当页面加载显示给用户的标记消息时会短暂呈现,然后消失(以显示我的预期) - 是不是我做错了什么导致了这种闪烁?

【问题讨论】:

标签: javascript angularjs angularjs-directive angular-ng-if


【解决方案1】:

发生这种情况是因为内容在 AngularJS 检测到 ShowMessgaefalse 之前一直呈现,然后将其隐藏。

为了在 Angular 准备好“说出”ShowMessgaetrue 还是 false 之前根本不显示内容,您应该使用 ng-cloak。这样,在 AngularJS“知道”ShowMessgae 的值之前,不会显示内容。然后,此时,框架已准备好显示(或不)内容,具体取决于ShowMessgae的值

<div ng-if="ShowMessgae" class="text-danger" ng-cloak>
    <p>
        <strong>
            Message displayed to User
        </strong>
    </p>
</div>

【讨论】:

  • 这里我有疑问,ng-cloak的解释是正确的,但是ng-if会从DOM中移除元素,而ng-show/ng-hide不会从DOM中移除元素,它使用 CSS 样式来隐藏/显示元素。那么我的疑问是为什么它会在 ng-if 的情况下呈现?
  • 最初内容在 html 中“渲染”(角度尚未准备好)。当 Angular 评估 ng-if 中的表达式时,它检测到这是假的,所以它从 html 中删除了内容(但这个序列会导致闪烁),所以如果我们使用 ng-cloak,内容最初不会显示(但它是在用 css 隐藏的 html 中,你是对的)然后当 angular 评估表达式时,内容被删除,但是这样一开始它就没有显示出来,因为它已经被 css 隐藏了。 (最终用户不关心内容是用 css 隐藏还是从 DOM 中删除;)
  • 感谢您的深度视图 :)
【解决方案2】:

添加ng-cloak,如下所示

<div ng-if="ShowMessgae" class="text-danger" ng-cloak>
   <p>
     <strong>
         Message displayed to User
     </strong>
   </p>
 </div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多