2016-08-23 39 views
1

我的代碼中有幾個組件應該使用的自定義指令。我將它註冊在我的app.module中,因此可以在我的模板中使用它。如何在Angular2 RC5打字稿中調用共享指令的方法?

但我的問題是,我沒有辦法從組件代碼中調用該指令的方法,因爲它不會導入並在​​中註冊它?

E.g. 這裏,當我不共享其用於像

import { Modal } from '../bootstrap'; 
    @Component({ 
     templateUrl: '.....html', 
     directives: [Modal] 
    }) 
    export class MyComponent { 
      constructor(private modal: Modal) { 
      this.modal.show(); 
     } 
    } 

指令,但是當我提取這些組分加入到單獨的模塊和移動此指令到共享模塊,import ..directives: [...]都消失了,我不能有private modal: Modal注入來調用其方法show。如果我保留它們,我會得到Error: Type Modal is part of the declarations of 2 modules: ...錯誤消息。

+0

請張貼一些代碼來演示您試圖完成的任務。我看不到如何調用共享指令代碼並將它們添加到'指令:[]'是相關的。 –

+0

請編輯問題並在其中添加代碼。 –

+0

您不提供或注入組件,只有服務(除非您想要引用子項中的父項)。 –

回答

0

將它添加到[providers]在你的AppModule:

providers: [Modal]

然後,你需要導入組件的服務,應該使用它,它會工作,也沒有必要將其添加爲指令,爲例如:

import { Modal } from '../bootstrap';

你可以把它添加到構造函數:

constructor (private modal: Modal)

現在你可以使用該服務:

this.modal.show()

編輯:

更新了答案,以配合您所提供的代碼。

+0

我有幾個模塊依賴於app.module,我需要這個指令。我試圖創建一個共享模塊,將提供此指令,但我有錯誤:類型模態是2模塊的聲明的一部分:錯誤... –

+0

從您的主模塊中刪除模態,並將其留在您的共享模塊,這可能是問題所在。你應該提供更多的代碼。 –