模板中的语法 #foo="myFoo" 是啥意思?

Posted

技术标签:

【中文标题】模板中的语法 #foo="myFoo" 是啥意思?【英文标题】:What does the syntax #foo="myFoo" in template mean?模板中的语法 #foo="myFoo" 是什么意思? 【发布时间】:2021-02-03 13:51:56 【问题描述】:

我了解主题标签语法<input #myinput > 的含义,提供访问元素的名称,但我不了解以下语法,来自角度材料网站中的示例:

 <mat-menu #menu="matMenu">

等号后面的表达式是什么意思?是某种混叠吗?如果是这样,为什么不直接写&lt;mat-menu #matMenu&gt;

【问题讨论】:

这能回答你的问题吗? What does Angular 2 hashtags in template mean? 不是真的,因为这个讨论只是关于语法“#name”,而不是#name='[something]'。然而,这个问题在下面的答案(第 4 个项目符号)中得到了回答。 【参考方案1】:

使用 # 您可以创建一个引用,以便您可以从组件中的其他位置调用。 正如文档所说:

模板引用变量通常是对 DOM 元素的引用 模板内。它也可以引用一个指令(其中包含一个 component)、元素、TemplateRef 或 Web 组件

Angular 会根据你声明变量的位置为每个模板引用变量分配一个值:

如果在组件上声明变量,则变量引用组件实例。 如果您在标准 html 标记上声明变量,则该变量引用该元素。 如果在元素上声明变量,则该变量引用一个 TemplateRef 实例,该实例代表模板。 如果变量在右侧指定了一个名称,例如#var="ngModel",则该变量指的是与exportAs匹配的元素上的指令或组件名字。

您可以在这里阅读更多内容:template-reference-variables | angular.io

【讨论】:

这是什么意思?如果在组件上声明变量...我们如何在组件上声明变量? 用哈希。 (例如:&lt;div #adiv&gt;&lt;/div&gt;。您现在可以使用adiv,因为您已经创建了一个引用。您可以从您的.ts 文件以及ElementRef 访问它,因为它是一个标准的HTML 标记。 看来等号后面出现的不是变量名而是类型。因此,当您使用 #menu="matMenu" 或 #var="ngModel" 时,您将确定引用我的 'menu' 或 'var' 的对象分别是 matMenu 或 ngModel 类型的指令。或者至少看起来是这样。 这与“如果您在标准 HTML 标记上声明变量,则变量引用元素”有何不同?两者都在 htmlelement 上,一个指代组件,另一个指代元素?没有意义。我仍然不明白“组件”部分。 我不懂你不懂的。是的 Template-Reference-Variable 的工作原理相同,它会在您放置它的任何位置创建一个引用。在组件中,您可以:&lt;my-component #mycomp&gt;&lt;/my-comp&gt;。现在您可以从其他地方引用此特定实例。就像 ElementReference 一样,但现在我们有了 MyComponent Reference。

以上是关于模板中的语法 #foo="myFoo" 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

reactjs中的传播语法“...this.props”感觉很奇怪

Java 通过引用传递

JavaScript中的继承

Python @property 与方法性能 - 使用哪一个?

矢量模板问题

ug中如何将相同的件替换