Javascript ng斗篷是如何工作的?
我一直在看ng斗篷的源代码 它看起来像是在指令的编译阶段剥离了ng-clope属性。但是当我尝试的时候Javascript ng斗篷是如何工作的?,javascript,angularjs,Javascript,Angularjs,我一直在看ng斗篷的源代码 它看起来像是在指令的编译阶段剥离了ng-clope属性。但是当我尝试的时候 console.log(element.html()) 在指令的编译函数期间,表达式仍然没有被计算,因此我得到了如下输出 <my-directive ng-cloak> {{foo}} </my-directive> {{foo} 假设ng斗篷将删除ng斗篷属性和相应的display:none,它不会显示{{foo}}吗?我在这里感到困惑。什么时候计算角度表达式
console.log(element.html())
在指令的编译函数期间,表达式仍然没有被计算,因此我得到了如下输出
<my-directive ng-cloak> {{foo}} </my-directive>
{{foo}
假设ng斗篷将删除ng斗篷属性和相应的display:none,它不会显示{{foo}}吗?我在这里感到困惑。什么时候计算角度表达式?它看起来不像是在编译函数中进行计算的。DOM何时更新?ngclope指令用于防止浏览器在加载应用程序时以原始(未编译)形式短暂显示角度html模板。使用此指令可避免由html模板显示引起的不良闪烁效果 该指令可以应用于元素,但首选用法是将多个ngclope指令应用于页面的小部分,以允许渐进呈现浏览器视图 NgClope与angular.js和angular.min.js中嵌入的以下css规则协同工作。对于CSP模式,请将angular-CSP.css添加到html文件(请参阅ngCsp) 示例index.html
<div id="template1" ng-cloak>{{ 'hello' }}</div>
<div id="template2" class="ng-cloak">{{ 'world' }}</div>
或者你可以用另一种方式
添加显示可能不够:无;你的CSS规则。如果要在正文中加载angular.js或模板编译不够快,请使用ng-斗篷指令,并在CSS中包含以下内容:
[ng\:cloak], [ng-cloak], .ng-cloak {
display: none !important;}
Angular将在
$digest
周期结束时插入绑定,以便所有其他修改都已完成。如果它们在较早的时候被处理,那么一个指令可能会在稍后更改绑定或作用域,并导致DOM过期
您可以装饰$interpolate
服务,以便在角度插值绑定时记录:
.config(function($provide){
$provide.decorator("$interpolate", function($delegate){
function wrap() {
var x = $delegate.apply(this, arguments);
if (x) {
var binding = arguments[0];
return function() {
var result = x.apply(this, arguments);
console.log('binding:', binding, result);
return result;
}
}
}
angular.extend(wrap, $delegate);
return wrap;
});
})
然后您可以看到所有指令都已处理,最后调用$interpolate服务并相应地修改DOM
ng斗篷还修复了ng click reverse的两次单击错误。一旦列出,此指令将修复带有ng click reverse的按钮的问题。指令需要两次单击才能执行
.config(function($provide){
$provide.decorator("$interpolate", function($delegate){
function wrap() {
var x = $delegate.apply(this, arguments);
if (x) {
var binding = arguments[0];
return function() {
var result = x.apply(this, arguments);
console.log('binding:', binding, result);
return result;
}
}
}
angular.extend(wrap, $delegate);
return wrap;
});
})