AngularJS和正确使用ngCloak

Pri*_*osK 6 javascript angularjs

引用其中一条关于ngCloak指令的评论(AngularJS文档):

它只在你的"index.html"页面上真正需要,因为浏览器可能会在Angular有机会解析/编译之前尝试渲染.在运行时,当Angular由于ng-view,ng-include等引入内容时,它将在浏览器呈现之前由Angular处理.

我在jsFiddle中创建了一个示例来验证这一点,令我惊讶的是,表达式在浏览器中呈现之前未进行评估.我希望模板首先被编译和链接,然后附加到DOM - 事实并非如此.

这是否意味着每个{{expression}}内部模板也应该被包裹ngCloak以防止闪烁或者我错过了什么?

Gui*_*e86 2

我的猜测是,警报允许浏览器在 Angular 完成其工作之前进行渲染,添加一个延迟为 0 的 setTimeout 显示渲染的模板:

http://jsfiddle.net/g/FLZZR/5/

function TemplateController ($scope) {    
    $scope.expression = "This should already be rendered...";
    setTimeout(function(){
        alert("... but it isn't.");
    });
}
Run Code Online (Sandbox Code Playgroud)

附加说明:您不能期望模板在您放置警报时呈现,最多它会被隐藏,角度使用脏检查来发挥其魔力,您必须让它“消化”您的更改以便它们显示在 DOM 中。