2017-11-28 11 views
1

私はダイアログサービスを構築しています。

myDialogService.show({ 
    templateUrl: `<div ng-click="$ctrl.log()">Hello dialog</div>`, 
    controller: function() { 
    this.log = function() { 
     console.log("logged from myDialogController"); 
    } 
    } 
}); 

素晴らしい作品:ダイアログは、このような$ mdDialog、と非常によく似コントローラを持つことができます。アンギュラモックで

locals.$scope = scope; 
const invokeController = $controller(options.controller, locals, true); 

const controller = invokeController(); 
if (options.controllerAs) { 
    scope[options.controllerAs] = controller; 
} else { 
    const controllerAs = "$ctrl"; 
    scope[controllerAs] = controller; 
} 

は、コンポーネントコントローラを呼び出すことができます$ componentControllerサービス、次のとおりです。私は道のコントローラを呼び出します。私のコードでは、私は登録されたコントローラ、またはコントローラの関数を呼び出すことしかできません。これは単なるコントローラではなく、登録されたコンポーネントしかないのであまり役に立ちません。

私の質問

ことが可能です/生産に$ componentControllerを使用することをお勧めしますか?または、私が見越した変種にAngularJSビルドがありますか?

答えて

1

$componentControllerはテストには役立ちますが、生産上のハックと考えられるため、ngMockモジュールに属します。 ngMockは十分に大きく、本番環境では利用できないはずなので、利用可能にするためには貼り付けする必要があります。

この問題を解決する適切な方法は、コンポーネントコントローラとして再利用される登録済みコントローラ、またはJSモジュールを使用してコントローラのインポート/エクスポート機能/クラスを再利用することです。

MdDialogControllerはサードパーティ製モジュールに属しているため、登録またはエクスポートされていないため、サイズが小さく、貼り付けできます。

+0

エクスポートされたコンポーネントコントローラを使用すると、可能な解決策のように聞こえます。 TSで自分のコードを書いたので、すでにエクスポートされています。私はこれを試してみる。ありがとう! – scipper

+0

これは元の質問からは明らかではありませんでしたが、私はそう思います、それは答えです。角度モジュールおよびDIは、ESモジュールによって提供される機能を部分的に代替します。コントローラの再利用と継承は、利用可能な場合にESモジュールに委譲する必要があります。 – estus

関連する問題