2017-07-28 65 views
2

似乎有幾種方法去剝皮這隻貓,但我想知道最好的(實踐)以及爲什麼。更新父母的孩子的'角度方式'是什麼?

如果我想收集兒童CMP一些數據,並把它傳遞給家長CMP,我可以:

  • 總結與父函數的對象,並把它作爲一個輸入 孩子,調用輸入上的函數。
  • 在child-cmp中創建一個EventEmitter函數併發出結果 收集parent-cmp中的數據。
  • 通過@ViewChild()訪問孩子,並直接調用它的方法 。
  • 與被收集

數據我敢肯定有更多的創建ngModel(僅適用於在形式?)。對於非基於表單的組件,我覺得使用Event發佈器是最昂貴的事情。但我無法真正解釋爲什麼有一個良好的技術基礎。思考?

+2

'@Output()'是在沒有其他選項沒有特定原因時選擇的第一件事情。共享服務是另一種選擇,尤其是當沒有直接的父母子女關係時。 –

+0

幾乎我所想的,但爲什麼?在引擎蓋下進行了優化嗎? –

+0

它在組件之間創建最少量的耦合。如果您想在另一個父組件中使用該子項,這是最簡單的方法。這就是所有的角度組件 - 可重用性。 –

回答

2
  • @Output()是在沒有其他選項的特定原因的情況下將子女與父母連接的首選。
    它創建組件之間最少的耦合量。如果您想在另一個父組件中使用該子項,這是最簡單的方法。這就是所有的角度組件 - 可重用性。

  • 共享服務是另一種選擇,特別是當沒有直接的父子關係時。

  • *ngModel(在子組件中實現ControlValueAccessor)是一個好主意,如果組件應該用在表單中。

避免

  • 獲取使用@ViewChild()孩子的基準使得父依賴性實現特定接口在子組件上。

  • 用函數包裝對象(或以其他方式傳遞方法或對象引用)
    傳遞方法引入強耦合。使用相當共享的服務。共享服務也是一個帶有方法的類實例,但它是每個開發人員習慣的Angular中的標準方式,並且更加明確。要將更新推送到參與組件,請使用

相關問題