angular2 組件之間通過(guò)service互相傳遞的實(shí)例
母組件傳值給子組件
母組件通過(guò)service傳值給子組件,很簡(jiǎn)單,聲明一個(gè)service
@Injectable() export class ToolbarTitleService { title:string; }
然后在母組件中依賴注入
@Component({ selector: 'admin', templateUrl: './admin.component.html', styleUrls: ['./admin.component.scss'], providers: [ToolbarTitleService], })
子組件中直接聲明即可使用
export class RoleListComponent implements OnInit { constructor(private toolbarTitleService:ToolbarTitleService) { console.log(this.toolbarTitleService.title); } ngOnInit() { } }
子組件傳值給母組件
那么我想反過(guò)來(lái)傳值回去該怎么辦,即使我在子組件注入了service,母組件也不會(huì)在我修改了servie的值之后得到通知,這時(shí)候就需要用到subscribe
service代碼:
import { Injectable } from '@angular/core'; import { Subject } from 'rxjs/Subject'; @Injectable() export class ToolbarTitleService { private titleSource = new Subject(); //獲得一個(gè)Observable titleObservable =this.titleSource.asObservable(); constructor() { } //發(fā)射數(shù)據(jù),當(dāng)調(diào)用這個(gè)方法的時(shí)候,Subject就會(huì)發(fā)射這個(gè)數(shù)據(jù),所有訂閱了這個(gè)Subject的Subscription都會(huì)接受到結(jié)果 emitTitle(title: string) { this.titleSource.next(title); } }
子組件代碼:
import { ToolbarTitleService } from './../../common/toolbar-title.service'; import { Component, OnInit ,Output,EventEmitter} from '@angular/core'; @Component({ selector: 'role-list', templateUrl: 'role-list.component.html', styleUrls: ['./role-list.component.css'], providers: [], }) export class RoleListComponent implements OnInit { constructor(private toolbarTitleService:ToolbarTitleService) { //調(diào)用方法,發(fā)射數(shù)據(jù) this.toolbarTitleService.emitTitle('角色列表'); } ngOnInit() { } }
母組件:
import { Component, OnInit } from '@angular/core'; import { ToolbarTitleService } from "app/common/toolbar-title.service"; import { Subscription } from "rxjs/Subscription"; @Component({ selector: 'admin', templateUrl: './admin.component.html', styleUrls: ['./admin.component.scss'], providers: [ToolbarTitleService], }) export class AdminComponent implements OnInit { title: string; subscription: Subscription; constructor(private toolbarTitleService: ToolbarTitleService) { //使用subscribe來(lái)訂閱,當(dāng)數(shù)據(jù)被發(fā)射出來(lái)的時(shí)候,這里就會(huì)接收到結(jié)果 this.subscription = this.toolbarTitleService.titleObservable.subscribe(src => console.log('得到的title:' + src)); } ngOnInit() { } //銷毀的時(shí)候需要取消訂閱,因?yàn)橛嗛喼髸?huì)一直處于觀察者狀態(tài),不取消會(huì)導(dǎo)致泄露 ngOnDestroy() { this.subscription.unsubscribe(); } }
以上這篇angular2 組件之間通過(guò)service互相傳遞的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
AngularJS基礎(chǔ) ng-paste 指令簡(jiǎn)單示例
本文主要介紹AngularJS ng-paste 指令,這里對(duì)ng-paste 指令的基礎(chǔ)資料做了整理,并附有代碼示例,有需要的朋友可以參考下2016-08-08AngularJS基于factory創(chuàng)建自定義服務(wù)的方法詳解
這篇文章主要介紹了AngularJS基于factory創(chuàng)建自定義服務(wù)的方法,結(jié)合實(shí)例形式分析了AngularJS使用factory創(chuàng)建自定義服務(wù)的具體步驟、操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-05-05詳解Angular路由動(dòng)畫及高階動(dòng)畫函數(shù)
本文主要講解了Angular的路由動(dòng)畫和高階動(dòng)畫函數(shù),對(duì)此感興趣的同學(xué),可以把代碼親自實(shí)驗(yàn)一下,理解其原理。2021-05-05AngularJS使用ng-repeat遍歷二維數(shù)組元素的方法詳解
這篇文章主要介紹了AngularJS使用ng-repeat遍歷二維數(shù)組元素的方法,結(jié)合實(shí)例形式分析了AngularJS二維數(shù)組元素遍歷的相關(guān)操作技巧,需要的朋友可以參考下2017-11-11