日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Angular4 组件通讯方法大全

發布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Angular4 组件通讯方法大全 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

組件通訊,意在不同的指令和組件之間共享信息。如何在兩個多個組件之間共享信息呢。

最近在項目上,組件跟組件之間可能是父子關系,兄弟關系,爺孫關系都有。。。。。我也找找了很多關于組件之間通訊的方法,不同的方法應用在不同的場景,根據功能需求選擇組件之間最適合的通訊方式。下面我就總結一下關于組件通訊的N多種方法。

1.父→子 input

parent.ts

import { Component } from '@angular/core';@Component({selector: 'page-parent',templateUrl: 'parent.html', }) export class ParentPage {i: number = 0;constructor() {setInterval(() => {this.i++;}, 1000)} } parent.html
<ion-header><ion-navbar><ion-title>Parent</ion-title></ion-navbar> </ion-header><ion-content padding><h2>Parent</h2><page-child [content]="i"></page-child> </ion-content>

child.ts

import { Component,Input } from '@angular/core';@Component({selector: 'page-child',templateUrl: 'child.html', }) export class ChildPage { @Input() content:string;constructor() {} } child.html

<ion-content padding> child:{{content}} </ion-content>

結果:

?

2.子→父 output

parent.ts

import { Component } from '@angular/core';@Component({selector: 'page-parent',templateUrl: 'parent.html', }) export class ParentPage {i: number = 0;
numberIChange(i:number){this.i = i;} } parent.html
<ion-header><ion-navbar><ion-title>Parent</ion-title></ion-navbar> </ion-header><ion-content padding><h2>Parent:{{i}}</h2><page-child (changeNumber)="numberIChange($event)"></page-child> </ion-content>

child.ts

import { Component, EventEmitter, Output } from '@angular/core';@Component({selector: 'page-child',templateUrl: 'child.html', })
export
class ChildPage {@Output() changeNumber: EventEmitter<number> = new EventEmitter();Number: number = 0;constructor() {setInterval(() => {this.changeNumber.emit(++this.Number);}, 1000)} } child.html

<ion-content padding>child </ion-content>

結果:

3.子獲得父實例

?parent.ts

import { Component } from '@angular/core';@Component({selector: 'page-parent',templateUrl: 'parent.html', }) export class ParentPage {i:number = 0; } parent.html

<ion-header><ion-navbar><ion-title>Parent</ion-title></ion-navbar> </ion-header><ion-content padding><h1>parent: {{i}}</h1><page-child></page-child> </ion-content>

child.ts

import { Component, Input, EventEmitter, Output,Host,Inject,forwardRef } from '@angular/core'; import{ParentPage} from '../parent/parent'; @Component({selector: 'page-child',templateUrl: 'child.html', }) export class ChildPage {constructor( @Host() @Inject(forwardRef(() => ParentPage)) app: ParentPage) {setInterval(() => {app.i++;}, 1000);} } child.html

<ion-content padding>child </ion-content>

結果:

4.父獲得子實例

parent.ts

import {ViewChild, Component } from '@angular/core'; import{ChildPage}from '../child/child';@Component({selector: 'page-parent',templateUrl: 'parent.html', }) export class ParentPage { @ViewChild(ChildPage) child:ChildPage;ngAfterViewInit() {setInterval(()=> {this.child.i++;}, 1000)} } parent.html

<ion-header><ion-navbar><ion-title>Parent</ion-title></ion-navbar> </ion-header><ion-content padding><h1>parent {{i}}</h1><page-child></page-child> </ion-content>

child.ts

import { Component, Input, EventEmitter, Output,Host,Inject,forwardRef } from '@angular/core';

@Component({selector: 'page-child',templateUrl: 'child.html', }) export class ChildPage { i:number = 0; } child.html

<ion-content padding> <h2>child {{i}}</h2> </ion-content>

結果:

5.service?

parent.ts

import { Component } from '@angular/core'; import{myService}from '../child/myService'@Component({selector: 'page-parent',templateUrl: 'parent.html', }) export class ParentPage { i:number=0; constructor(service:myService) {setInterval(()=> {service.i++;}, 1000)} } parent.html

<ion-header><ion-navbar><ion-title>Parent</ion-title></ion-navbar> </ion-header><ion-content padding><h1>parent {{i}}</h1><page-child></page-child> </ion-content>

child.ts

import { Component} from '@angular/core'; import{myService}from "../child/myService" @Component({selector: 'page-child',templateUrl: 'child.html', }) export class ChildPage { constructor(public service:myService){} } child.html

<ion-content padding> <h2>child {{service.i}}</h2> </ion-content> myService.ts
ps:記得在app.module.ts 加上providers: [KmyService] import{Injectable } from '@angular/core'; @Injectable() export class KmyService {i:number = 0; }

結果:

6.EventEmitter

myService.ts

import {Component,Injectable,EventEmitter} from '@angular/core'; @Injectable() export class myService {change: EventEmitter<number>;constructor(){this.change = new EventEmitter();} }

parent.ts

import { Component } from '@angular/core'; import{myService}from '../child/myService'@Component({selector: 'page-parent',templateUrl: 'parent.html', }) export class ParentPage {i:number = 0;constructor(service:myService) {setInterval(()=> {service.change.emit(++this.i);}, 1000)} } parent.html

<ion-header><ion-navbar><ion-title>Parent</ion-title></ion-navbar> </ion-header><ion-content padding><h1>parent {{i}}</h1><page-child></page-child> </ion-content>

child.ts

import { Component, EventEmitter} from '@angular/core';import{myService}from "../child/myService" @Component({selector: 'page-child',templateUrl: 'child.html', }) export class ChildPage {i:number = 0;constructor(public service:myService){service.change.subscribe((value:number)=>{this.i = value;})}} child.html

<ion-content padding><h2>child {{i}}</h2> </ion-content>

?

結果:

7.訂閱

parent.ts

import { Component } from '@angular/core'; import{myService}from '../child/myService'@Component({selector: 'page-parent',templateUrl: 'parent.html', }) export class ParentPage {i:number=0;constructor(public service:myService) {setInterval(()=> {this.service.StatusMission(this.i++);}, 1000)} } parent.html

<ion-header><ion-navbar><ion-title>Parent</ion-title></ion-navbar> </ion-header><ion-content padding><h1>parent</h1><page-child></page-child> </ion-content>

child.ts

import { Component, Injectable } from '@angular/core' import { myService } from "../child/myService" import { Subscription } from 'rxjs/Subscription'; @Component({selector: 'page-child',templateUrl: 'child.html', }) export class ChildPage {i:number=0;subscription: Subscription;constructor(private Service: myService) {this.subscription = Service.Status$.subscribe(message => {this.i=message;});}ngOnDestroy() {this.subscription.unsubscribe();} } child.html

<ion-content padding><h2>child {{i}}</h2> </ion-content>

myService.ts

import { Injectable } from '@angular/core'; import { Subject } from 'rxjs/Subject';@Injectable() export class myService {private Source=new Subject<any>();Status$=this.Source.asObservable();StatusMission(message: any) {this.Source.next(message);} }

結果:

?

以上七種組件與組件的通訊方式,可以選擇應用于適合的場景里面,根據情況吧。

?

此隨筆乃本人原創,如有疑問歡迎在下面評論,轉載請標明出處。

如果對您有幫助請動動鼠標右下方給我來個贊,您的支持是我最大的動力。

轉載于:https://www.cnblogs.com/huangenai/p/7246651.html

總結

以上是生活随笔為你收集整理的Angular4 组件通讯方法大全的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。