angular2 組件之間通過service互相傳遞的實(shí)例
母組件傳值給子組件
母組件通過service傳值給子組件,很簡單,聲明一個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() { }
}
子組件傳值給母組件
那么我想反過來傳值回去該怎么辦,即使我在子組件注入了service,母組件也不會在我修改了servie的值之后得到通知,這時候就需要用到subscribe
service代碼:
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class ToolbarTitleService {
private titleSource = new Subject();
//獲得一個Observable
titleObservable =this.titleSource.asObservable();
constructor() { }
//發(fā)射數(shù)據(jù),當(dāng)調(diào)用這個方法的時候,Subject就會發(fā)射這個數(shù)據(jù),所有訂閱了這個Subject的Subscription都會接受到結(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來訂閱,當(dāng)數(shù)據(jù)被發(fā)射出來的時候,這里就會接收到結(jié)果
this.subscription = this.toolbarTitleService.titleObservable.subscribe(src => console.log('得到的title:' + src));
}
ngOnInit() {
}
//銷毀的時候需要取消訂閱,因?yàn)橛嗛喼髸恢碧幱谟^察者狀態(tài),不取消會導(dǎo)致泄露
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
以上這篇angular2 組件之間通過service互相傳遞的實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
angularjs實(shí)現(xiàn)對表單輸入改變的監(jiān)控(ng-change和watch兩種方式)
這篇文章主要介紹了angularjs通過ng-change和watch兩種方式實(shí)現(xiàn)對表單輸入改變的監(jiān)控,需要的朋友可以參考下2018-08-08
利用Angularjs和原生JS分別實(shí)現(xiàn)動態(tài)效果的輸入框
現(xiàn)在的很多網(wǎng)站都將輸入框做成了動態(tài)的效果,這樣對于用戶體檢來說非常好,這篇文章分別用Angularjs和原生JS兩種方法來實(shí)現(xiàn)動態(tài)效果的輸入框,具有一定的參考價值,有需要的小伙伴們可以來參考借鑒。2016-09-09
對angular 實(shí)時更新模板視圖的方法$apply詳解
今天小編就為大家分享一篇對angular 實(shí)時更新模板視圖的方法$apply詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10
整理AngularJS框架使用過程當(dāng)中的一些性能優(yōu)化要點(diǎn)
這篇文章主要介紹了AngularJS框架使用過程當(dāng)中的一些性能優(yōu)化要點(diǎn),Angular通常被用來制作大型單頁應(yīng)用,因而性能問題也是必須考慮的因素,需要的朋友可以參考下2016-03-03
Angular使用 ng-img-max 調(diào)整瀏覽器中的圖片的示例代碼
本篇文章主要介紹了Angular使用 ng-img-max 調(diào)整瀏覽器中的圖片的示例代碼,具有一定的參考價值,有興趣的可以了解一下2017-08-08

