使用模板引用变量与嵌套组件交互

发布日期:2026-07-10 00:39:02   来源 : 杭州电子商务研究院    浏览量 :12
杭州电子商务研究院 发布日期:2026-07-10 00:39:02  
12

介绍

大家好!在本指南中,我们将了解模板参考。

组件之间有多种交互方式,例如@Input@Output。但是如果我们必须在父组件中调用子函数怎么办?

对于这种场景,我们可以在父组件中创建一个新的函数,也可以创建一个具有公共功能的服务文件,并在父子函数中使用它。

今天我们将学习另一种称为模板引用的方法,这样您就可以避免在父组件或不同的服务文件中创建不同的函数。

创建组件

我们需要创建两个组件:一个子组件和一个父组件。为每个文件设置不同的文件夹是一种很好的做法。所以我将在components文件夹中创建所有组件。

      ng g c /components/parent --skipTests=true
    
      ng g c /components/child --skipTests=true
    

在上面的代码片段中,我使用了generate的简称,即g ,以及component的简称,即c。请注意--skipTests=true,尽管我们不打算编写单元测试用例,所以我使用它来跳过测试文件。

我们已经准备好了。让我们深入了解模板参考。

在子组件中创建函数

现在是时候在子组件中创建一个函数了,以便我们可以使用子组件的引用在父组件中调用它。

子组件

      import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-child',
  templateUrl: './child.component.html',
  styleUrls: ['./child.component.scss']
})
export class ChildComponent implements OnInit {

  constructor() { }

  ngOnInit() {
  }

  hello(){
    console.log('hello from child component');
  }

}
    

我创建了一个hello()函数。一旦调用该函数,我们就会在控制台上收到一条消息。

获取子组件的引用

我们已经成功地在子组件中创建了一个函数。现在是时候将子组件放入父组件中了。

父组件.html

      <app-child #child></app-child>
    

注意到我在app-child标签下写了#child。在 Angular 中,要引用任何组件,我们需要将#与字符串放在一起。在我们的例子中,我写了#child,因此我们可以使用它来获取子组件的引用。

@ViewChild 装饰器的使用

@ViewChild ()装饰器是 Angular 中最有用的装饰器之一。它用于获取组件的引用。@ViewChild()的语法是:

      @ViewChild('referenceVariable') childVariable:ChildComponent
    

它接受一个引用变量,在我们的例子中是#child。我们在 child 标签下的父组件中写入了它。childVariable可以是任何东西——它只是一个变量名,我们将使用它来访问子组件的变量或函数。为了确保类型安全,我们应该始终使用冒号 (:) 来编写变量的类型。

ngAfterViewInit() Angular 生命周期钩子的使用

ngAfterViewInit是 Angular 生命周期钩子之一。我们可以在其中使用@ViewChild变量。我们无法ngOnInitngOnChangesngDoCheck中访问@ViewChild变量,因为只有在初始化视图后才能访问它。

在父组件中调用子函数

父组件.ts

      import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';
import { ChildComponent } from '../child/child.component';

@Component({
  selector: 'app-parent',
  templateUrl: './parent.component.html',
  styleUrls: ['./parent.component.scss']
})
export class ParentComponent implements OnInit {

  @ViewChild('child') child: ChildComponent;
  
  constructor() { }

  ngOnInit() {
  }

  ngAfterViewInit(){
    this.child.hello();
  }

}
    

在上面的代码片段中,我们使用了@ViewChild装饰器来获取子元素的引用。我们使用了我ngAfterViewInit()中调用的hello()函数作为子元素引用变量,该变量是在子组件中定义的。

输出:

      hello from child component
    

您将在控制台上获得相同的输出。

结论

模板引用是减少代码量的最佳方法之一。它可以节省一行代码,并以最少的时间为您提供相同的结果。如果谈论生产力,代码行数确实很重要。

您可以在此处阅读有关模板参考的更多信息。

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据