• 技术文章 >web前端 >js教程

    angular学习之聊聊组件通讯和组件生命周期

    青灯夜游青灯夜游2022-05-18 20:41:02转载144
    本篇文章带大家了解一下angular中的组件通讯和组件生命周期,简单介绍一下向组件内部传递数据、组件向外部传递数据的方法,希望对大家有所帮助!

    组件通讯


    1、向组件内部传递数据

    <app-favorite [isFavorite]="true"></app-favorite>
    // favorite.component.ts
    import { Input } from '@angular/core';
    export class FavoriteComponent {
        @Input() isFavorite: boolean = false;
    }

    【相关教程推荐:《angular教程》】

    注意:在属性的外面加 [] 表示绑定动态值,在组件内接收后是布尔类型,不加 [] 表示绑定普通值,在组件内接收后是字符串类型

    <app-favorite [is-Favorite]="true"></app-favorite>
    import { Input } from '@angular/core';
    
    export class FavoriteComponent {
      @Input("is-Favorite") isFavorite: boolean = false
    }

    2、组件向外部传递数据

    需求:在子组件中通过点击按钮将数据传递给父组件

    <!-- 子组件模板 -->
    <button (click)="onClick()">click</button>
    // 子组件类
    import { EventEmitter, Output } from "@angular/core"
    
    export class FavoriteComponent {
      @Output() change = new EventEmitter()
      onClick() {
        this.change.emit({ name: "张三" })
      }
    }
    <!-- 父组件模板 -->
    <app-favorite (change)="onChange($event)"></app-favorite>
    // 父组件类
    export class AppComponent {
      onChange(event: { name: string }) {
        console.log(event)
      }
    }

    组件生命周期


    请添加图片描述

    1、挂载阶段

    挂载阶段的生命周期函数只在挂载阶段执行一次,数据更新时不再执行。

    1)、constructor

    Angular 在实例化组件类时执行, 可以用来接收 Angular 注入的服务实例对象。

    export class ChildComponent {
      constructor (private test: TestService) {
        console.log(this.test) // "test"
      }
    }

    2)、ngOnInit

    在首次接收到输入属性值后执行,在此处可以执行请求操作。

    <app-child name="张三"></app-child>
    export class ChildComponent implements OnInit {
      @Input("name") name: string = ""
      ngOnInit() {
        console.log(this.name) // "张三"
      }
    }

    3)、ngAfterContentInit

    当内容投影初始渲染完成后调用。

    <app-child>
    	<div #box>Hello Angular</div>
    </app-child>
    export class ChildComponent implements AfterContentInit {
      @ContentChild("box") box: ElementRef<HTMLDivElement> | undefined
    
      ngAfterContentInit() {
        console.log(this.box) // <div>Hello Angular</div>
      }
    }

    4)、ngAfterViewInit

    当组件视图渲染完成后调用。

    <!-- app-child 组件模板 -->
    <p #p>app-child works</p>
    export class ChildComponent implements AfterViewInit {
      @ViewChild("p") p: ElementRef<HTMLParagraphElement> | undefined
      ngAfterViewInit () {
        console.log(this.p) // <p>app-child works</p>
      }
    }

    2、更新阶段

    1)、ngOnChanges

    基本数据类型值变化

    <app-child [name]="name" [age]="age"></app-child>
    <button (click)="change()">change</button>
    export class AppComponent {
      name: string = "张三";
      age: number = 20
      change() {
        this.name = "李四"
        this.age = 30
      }
    }
    export class ChildComponent implements OnChanges {
      @Input("name") name: string = ""
      @Input("age") age: number = 0
    
      ngOnChanges(changes: SimpleChanges) {
        console.log("基本数据类型值变化可以被检测到")
      }
    }

    引用数据类型变化

    <app-child [person]="person"></app-child>
    <button (click)="change()">change</button>
    export class AppComponent {
      person = { name: "张三", age: 20 }
      change() {
        this.person = { name: "李四", age: 30 }
      }
    }
    export class ChildComponent implements OnChanges {
      @Input("person") person = { name: "", age: 0 }
    
      ngOnChanges(changes: SimpleChanges) {
        console.log("对于引用数据类型, 只能检测到引用地址发生变化, 对象属性变化不能被检测到")
      }
    }

    2)、ngDoCheck:主要用于调试,只要输入属性发生变化,不论是基本数据类型还是引用数据类型还是引用数据类型中的属性变化,都会执行。

    3)、ngAfterContentChecked:内容投影更新完成后执行。

    4)、ngAfterViewChecked:组件视图更新完成后执行。

    3、卸载阶段

    1)、ngOnDestroy

    当组件被销毁之前调用, 用于清理操作。

    export class HomeComponent implements OnDestroy {
      ngOnDestroy() {
        console.log("组件被卸载")
      }
    }

    更多编程相关知识,请访问:编程视频!!

    以上就是angular学习之聊聊组件通讯和组件生命周期的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:csdn,如有侵犯,请联系admin@php.cn删除
    专题推荐:Angular.js Angular
    上一篇:JavaScript内置对象Math实例分享 下一篇:完全掌握JavaScript的Date对象
    千万级数据并发解决方案

    相关文章推荐

    • Angular中怎么自定义视频播放器• Angular项目中怎么使用 SASS 样式• Angular知识点分享:聊聊表单、管道、绑定、指令、通信和周期• 浅析Angular变更检测机制,聊聊如何进行性能优化?• 聊聊angular中进行内容投影的方法• 深入了解angular中的表单(响应式和模板驱动)
    1/1

    PHP中文网