2016-08-23 6 views
1

私はコード内にいくつかのコンポーネントが消費するカスタム指示文を持っています。私はそれを私のapp.moduleに登録したので、私のテンプレートでそれを使うことができます。Angular2 RC5タイスクリプトで共有ディレクティブのメソッドを呼び出すにはどうすればよいですか?

しかし、私の問題は、このディレクティブのメソッドをコンポーネントコードから呼び出す方法がないことです。これは、インポートしてもそれを​​に登録する必要がありません。

など。ここで 私はそれが

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

あなたAppModuleに[providers]にそれを追加します。

providers: [Modal]

は、その後、あなたがそれを消費する必要があるコンポーネントでそのサービスをインポートする必要があり、それが動作します、のために、ディレクティブとして追加する必要はありません例:

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

その後、コンストラクタにそれを追加することができます

constructor (private modal: Modal)

今、あなたは、そのサービスを使用することができます。

this.modal.show()

編集:

は、あなたが提供されたコードに合わせて、答えを更新しました。

+0

私はapp.moduleに依存するいくつかのモジュールを持っています。私は、このディレクティブをすべて必要としています。私はこのディレクティブを提供する共有モジュールを作成しようとしましたが、エラーが発生しました:Type Modalは2つのモジュールの宣言の一部です:error ... –

+0

メインモジュールからモーダルを削除し、それは問題かもしれません。より多くのコードを提供する必要があります。 –

関連する問題