6

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

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

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

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

4

1 回答 1

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.");
    });
}

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

于 2013-06-13T13:35:11.100 回答