angular父子組件之間的傳值

父子組件的傳值仅淑,是mvvm框架中必然繞不過去的話題称勋,下面列舉在angular中父子組件傳值的各種方式。

一涯竟、通過輸入型綁定把數(shù)據(jù)從父組件傳到子組件

即帶有@Input裝飾器赡鲜,如下面兩種方式:

@[Input](https://angular.cn/api/core/Input)() hero:  Hero;
@[Input](https://angular.cn/api/core/Input)('master') masterName:  string;

父組件在引用子組件的標簽的時候,通過 [ ] 符號將父組件的變量名賦值給該變量庐船;

<app-hero-child *[ngFor](https://angular.cn/api/common/NgForOf)="let hero of heroes" [hero]="hero [master]="master"></app-hero-child>

子組件通過在變量名前面加上@Input裝飾器的方式银酬,可以從父組件取值,實現(xiàn)父子組件的傳值筐钟。

二揩瞪、通過setter截聽輸入屬性值的變化

在第一種方案的基礎上,使用一個輸入屬性setter篓冲,以攔截父組件中值的變化李破,并采取行動。

 export  class  NameChildComponent  {
   private _name =  '';

  @[Input]()
  set name(name:  string)  {
  this._name =  (name && name.trim())  ||  '<no     
  name set>';
  }

  get name():  string  {  return  this._name;  }
 }

三壹将、通過ngOnChanges()來截聽輸入屬性值的變化

通過OnChanges生命周期鉤子接口的ngOnChanges()方法來檢測輸入屬性值的變化并做出回應嗤攻。

四、父組件監(jiān)聽子組件的事件

子組件暴露一個EventEmitter屬性诽俯,當事件發(fā)生時妇菱,子組件利用該屬性emits(向上彈射)事件,父組件綁定這個事件屬性暴区,并在事件發(fā)生時做出回應恶耽。
子組件的EventEmitter屬性是一個輸入屬性,通常帶有@Output裝飾器颜启。
子組件:

// template
<button (click)="vote(false)" [disabled]="didVote">Disagree</button>
// component
@Output() voted =  new EventEmitter<boolean>();

vote(agreed: boolean) {
    this.voted.emit(agreed);
  }

父組件綁定一個事件處理器,用來響應子組件的事件浪讳。彈射出的事件缰盏,直接寫在父組件引入子組件的位置上。

<app-voter (voted)="onVoted($event)"></app-voter>

五淹遵、父子組件通過本地變量互動

父組件不能使用數(shù)據(jù)綁定來讀取子組件的屬性或者調用子組件的方法口猜。但可以在父組件模板里,新建一個本地變量來代表子組件透揣,然后利用這個變量來讀取子組件的屬性和調用子組件的方法济炎。

//父組件的template
  <button (click)="timer.start()">Start</button>
  <button (click)="timer.stop()">Stop</button>
  <div class="seconds">{{timer.seconds}}</div>
  <app-countdown-timer #timer></app-countdown-timer>

本地變量的寫法是(# + 變量名)
在父組件中,把本地變量(#timer)放到子組件標簽(<countdown-timer>)中辐真,用來代表子組件须尚,該父組件模板就得到子組件的引用崖堤,可以在父組件模板訪問子組件的屬性和方法。

六耐床、父組件調用@ViewChild()

上面那種本地變量的方式密幔,有局限性,只能在父組件的模板中使用撩轰。如果在父組件的類中讀取子組件的屬性方法胯甩,就不能使用本地變量了。
當父組件類需要這種訪問時堪嫂,可以把子組件作為ViewChild偎箫,注入到父組件中。

@ViewChild(CountdownTimerComponent)
private timerComponent:  CountdownTimerComponent;

首先皆串,你必須導入對裝飾器ViewChild以及生命周期鉤子 AfterViewInit 的引用淹办。
接著,通過 ViewChild 屬性裝飾器愚战,將子組件 CountdownTimerComponent 注入到私有屬性 timerComponent 里面娇唯。
ngAfterViewInit() 生命周期鉤子是非常重要的一步。被注入的計時器組件只有在 Angular 顯示了父組件視圖之后才能訪問.所以需要加上setTimeout()來等下一輪寂玲。

 ngAfterViewInit()  {
  setTimeout(()  =>  this.seconds =  ()  =>        
  this.timerComponent.seconds,  0);
}

七塔插、通過服務來通訊

不會!rxjs看不懂M赜础O胄怼!
不過可以通過redux存在統(tǒng)一的store樹里面断序,增刪改查都從這里取流纹,變相實現(xiàn)傳值。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末违诗,一起剝皮案震驚了整個濱河市漱凝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诸迟,老刑警劉巖茸炒,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異阵苇,居然都是意外死亡壁公,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門绅项,熙熙樓的掌柜王于貴愁眉苦臉地迎上來紊册,“玉大人,你說我怎么就攤上這事快耿∧叶福” “怎么了芳绩?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長关斜。 經(jīng)常有香客問我示括,道長,這世上最難降的妖魔是什么痢畜? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任垛膝,我火速辦了婚禮,結果婚禮上丁稀,老公的妹妹穿的比我還像新娘吼拥。我一直安慰自己,他們只是感情好线衫,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布凿可。 她就那樣靜靜地躺著,像睡著了一般授账。 火紅的嫁衣襯著肌膚如雪枯跑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天白热,我揣著相機與錄音敛助,去河邊找鬼。 笑死屋确,一個胖子當著我的面吹牛纳击,可吹牛的內容都是我干的。 我是一名探鬼主播攻臀,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼焕数,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刨啸?” 一聲冷哼從身側響起堡赔,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎设联,沒想到半個月后加匈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡仑荐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了纵东。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粘招。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖偎球,靈堂內的尸體忽然破棺而出洒扎,到底是詐尸還是另有隱情辑甜,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布袍冷,位于F島的核電站磷醋,受9級特大地震影響,放射性物質發(fā)生泄漏胡诗。R本人自食惡果不足惜邓线,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望煌恢。 院中可真熱鬧骇陈,春花似錦、人聲如沸瑰抵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽二汛。三九已至婿崭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肴颊,已是汗流浹背氓栈。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留苫昌,地道東北人颤绕。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像祟身,于是被迫代替她去往敵國和親奥务。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內容