<div *ngIf="((one===one)&& (two===two)) || (one===two)"></div>
Angular如何评估这个相当复杂的表达式?Angular如何评估表达式?
当然,它不使用eval
,那么它如何解析和评估它?
难道有人指向正确的方向吗?
我正在查看ngIf
的源代码,但似乎没有发现任何有趣的内容。
好像到了ngIf
接收到的值,它已经被角度评估了。
<div *ngIf="((one===one)&& (two===two)) || (one===two)"></div>
Angular如何评估这个相当复杂的表达式?Angular如何评估表达式?
当然,它不使用eval
,那么它如何解析和评估它?
难道有人指向正确的方向吗?
我正在查看ngIf
的源代码,但似乎没有发现任何有趣的内容。
好像到了ngIf
接收到的值,它已经被角度评估了。
第一:
的*ngIf
指示基本上是
<div *ngIf="expr"></div>
<ng-template [ngIf]="expr">
<div></div>
</ng-template>
所以基本上“与<ng-template [ngIf]>
围绕”快捷方式把它归结为同样的评价输入绑定。你可以在这里搜索信息:
https://github.com/angular/angular/blob/master/aio/content/guide/template-syntax.md
注意的是,当角运行变化检测,它会检查是否有任何变量发生了变化,如果是这种情况重新评估,如果该组件是要显示/实例或不。
编译Angular组件时,将为所有需要在模板中应用的绑定和所有组件,指令和管道生成TypeScript(以及后续步骤JavaScript中的TypeScript)。 这个JavaScript然后只是由浏览器执行。
这是AngularJS的一个主要区别,其中带有Angular绑定结构的HTML被添加到浏览器加载的HTML中,然后Angular解析DOM并应用其逻辑。
在Angular 2及更高版本中,仅在编译了组件模板后才将HTML添加到DOM 。如果您在浏览器devtools检查HTML,具体角绑定缺失(或更换,如果他们包括一些非角DOM语义)
随着静态模块,当角申请是由编译出现这种情况开发人员(部署前)。 使用动态模块组件编译也可以在运行时发生。 但它仍然是一样的。模板只添加到DOM 后角度生成他们的JS代码和替换/删除角度特定的绑定语法..
是的,你应该看看为该代码生成的JavaScript文件。 –
由于这是一个通用的问题,我猜所有的模板引擎,我添加Angularjs和Angular的标签。 – Milad