首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Angular如何计算表达式?

Angular如何计算表达式?
EN

Stack Overflow用户
提问于 2017-08-30 19:43:37
回答 2查看 43关注 0票数 2
代码语言:javascript
运行
复制
  <div *ngIf="((one===one)&& (two===two)) || (one===two)"></div>

Angular如何计算这个相当复杂的表达式?

它肯定没有使用eval,那么它如何解析和评估它呢?

有人能给我指个方向吗?

我正在查看ngIf的源代码,但似乎没有发现任何有趣的东西。

似乎在ngIf收到这个值的时候,它已经被angular评估过了。

EN

回答 2

Stack Overflow用户

发布于 2017-08-30 20:02:00

编译Angular组件时,将为所有绑定以及需要在模板中应用的所有组件、指令和管道生成TypeScript (以及下一步JavaScript中的are )。然后,浏览器就会执行这个JavaScript。

这是与AngularJS的主要区别之一,后者将具有Angular绑定结构的HTML添加到浏览器加载的HTML中,然后Angular解析DOM并应用其逻辑。

在Angular 2和更高版本中,只有在编译组件模板之后,才会将HTML添加到DOM 中。如果您在浏览器devtools中检查HTML,则缺少特定于Angular的绑定(如果包含一些非Angular DOM语义,则替换它们)

对于静态模块,当开发人员编译Angular应用程序时(在部署之前),就会发生这种情况。使用动态模块,组件编译也可以在运行时进行。但它仍然是一样的。只有在 Angular为模板生成JS代码并替换/删除特定于Angular的绑定语法之后,才会将模板添加到DOM 中。

票数 1
EN

Stack Overflow用户

发布于 2017-08-30 19:59:28

首先:

*ngIf指令基本上是“用<ng-template [ngIf]>环绕”的快捷方式

代码语言:javascript
运行
复制
 <div *ngIf="expr"></div>


 <ng-template [ngIf]="expr">
   <div></div>
 </ng-template>

因此,基本上它可以归结为与输入绑定相同的计算。您可以在此处搜索信息:

https://github.com/angular/angular/blob/master/aio/content/guide/template-syntax.md

请注意,当Angular运行更改检测时,它将检查是否有任何变量发生了更改,如果是,则重新评估组件是否要显示/实例化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45959504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档