我注意到我的初級開發人員正在將應用程式組件注入另一個組件以更新狀態并從另一個組件呼叫方法。我告訴她這不是角度方式,而是使用主題。我也覺得有時注入組件比使用主題容易得多。我沒有找到任何解釋為什么不鼓勵這種方法的帖子?
她的代碼看起來像
import { ExampleComponent } from './../example/example.component';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
constructor(example:ExampleComponent){
example.getAllUsers()
}
}
uj5u.com熱心網友回復:
從技術上講,您可以將組件注入另一個組件,但這不會被視為最佳實踐。
根據 Angular 檔案:
將組件中的邏輯限制為僅視圖所需的邏輯。所有其他邏輯都應委托給服務。
它有很多很好的理由。
這里是其中的一些:
服務中的邏輯可以更容易地在單元測驗中隔離,而組件中的呼叫邏輯可以很容易地模擬。
從組件中洗掉依賴項并隱藏實作細節。
在您的情況下,我猜想注入另一個組件的組件具有可以移動到服務并在其他類中重用的業務邏輯。
或者,如果它不是業務邏輯,您可以考慮只創建一個基類并繼承其他組件。
PS如果我們深入挖掘,您的問題可以改寫如下:
不遵循最佳實踐可以嗎?
當然,如果你跟隨,你可能會得到它的好處。如果您不這樣做,您的專案可能仍然有效,但從長遠來看,您可能會面臨許多架構和重構挑戰。
uj5u.com熱心網友回復:
如果你想爭論它,你會問:“這符合任何設計模式嗎? ”
答案是否定的,將一個組件“注入”到另一個組件中并不常見,如果您想實作組件之間的通信,那么您應該使用Service。
為什么?
這個想法不是讓事情發揮作用,這個想法是,例如,如果您想將新成員加入團隊,那么他們應該熟悉他們所看到的,如果您遵循標準,那么是的,一切都會好起來的,如果沒有,那么維護方面會有些頭疼。
對于此類用例,使用服務是眾所周知的最佳實踐,它遵循 DI 設計模式,如果成功實施,也是可重用的解決方案。
uj5u.com熱心網友回復:
這不是在組件之間傳達更改的正確方式。我見過的新 Angular 開發人員的另一種常見的 angular-anti-pattern 方法是使用ViewChild:
export class MyParentComponent {
@ViewChild(MyChildComponent) childComponent: MyChildComponent;
buttonHandler(){
this.childComponent.doSomething();
}
}
在您提供的示例和使用的示例中ViewChild,創建了組件之間的緊密耦合 -MyParentComponent如果不了解MyChildComponent.
更模塊化的方法是使用組件來傳達更改@Input(),@Output()或者讓組件使用公共服務。
如果沒有關于兩者負責什么的更多詳細資訊HomeComponent,ExampleComponent我將無法推薦一種方法而不是另一種方法,但是任何一種方法都肯定可以滿足您的要求。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/507197.html
下一篇:如何正確讀取引數值
