详解Angular模板引用变量及其作用域
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了详解Angular模板引用变量及其作用域,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2629字,纯文字阅读大概需要4分钟。
内容图文
Angular模板引用变量
如果你曾经参与过Angular项目的开发,那么你可能一眼就会看出谁将是本文的主角:
<input type="text" [value]="value" #name>
若你对此陌生,也无须在意。示例代码的<input>标签的属性中存在一个画风明显与其他属性不同的家伙——#name,这种以一个#开头命名,被附加在DOM元素上的属性,被称为模板引用变量(template reference variables)。
那么何为模板引用变量呢?文档是这样描述的:
A template reference variable is often a reference to a DOM element within a template. It can also be a reference to an Angular component or directive or a web component.
模板引用变量可以是Angualr模板中的DOM元素、Angular组件(指令),甚至Web组件的引用,而它具体是什么,则取决于它所依附的元素(不使用指令进行干预时)。如前文示例代码中的模板引用变量name就是<input>这一DOM元素的引用。
既然模板引用变量是模板中某一元素的引用,那理所当然地我们便可以通过这个引用变量" 触及 "该模板元素的" 实体 "。这在实际地开发中是十分实用的,考虑以下代码:
<app-component #component [input]="variable"></app-component> {{ component.input }} {{ component.func() }}
通过模板引用变量我们获得了app-component组件的实例引用,这使得我们可以轻松地在模板中访问app-component组件内部的成员。在某些情境下,这种能力给我们的开发提供了很大的助力。
模板引用变量的作用域
You can refer to a template reference variable anywhere in the template.
在文档中,官方毫不含糊地向我们表示:模板引用变量可以在模板中的任何地方使用。最骚的是,“任何地方”还被特别加粗。我们在大多数的时候,并不会对这句话产生疑问,但也许某天你会怀疑这个anywhere是否真实。有如下的代码:
<app-card> <ng-template #body> <app-component #component [input]="variable"></app-component> </ng-template> <ng-template #footer> {{component.input}} </ng-template> </app-card>
当代码运行后,我们将会在控制台看到这样的错误提示:
TypeError: Cannot read property 'input' of undefined
为什么component会是undefined?
答案其实很明显,模板引用对象可以在模板中的任何地方使用,但此例中component的定义与使用却并不在一个template中。文档中所描述的 template 并不能直接与 组件的模板文件 划上等号。当我们使用ng-template时,会在当前模板的内部再建立一个新的模板,它的内部无法直接被外部模板触及,因此示例中的component.input自然会引起错误。
当 template 的定义明确以后,一切都是如此简单:模板引用变量存在作用域,其作用域是它所处的 template,而非它所在的模板文件,同时它可以在其作用域内的任何地方被使用。
最后,我们再看一个例子:
<div *ngIf="true"> <app-component #component [input]="variable"></app-component> </div> {{component.input}}
当这段代码运行后,我们依旧会在控制台看到:
TypeError: Cannot read property 'input' of undefined
至于背后的原因,我便作为小小的悬念留给大家,由大家自己去了解。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
内容总结
以上是互联网集市为您收集整理的详解Angular模板引用变量及其作用域全部内容,希望文章能够帮你解决详解Angular模板引用变量及其作用域所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。