2016-03-26 15 views
2

問題が残っています。私はコントローラ "searchCtrl"を持っています、それはいくつかのスコープオブジェクトがディレクティブで使用する必要があります。コントローラを複数のディレクティブで共有する方法は?

コントローラの1つのディレクティブであれば、コントローラ: "searchCtrl"として使用できます。しかし、複数のコンポーネントがthridパーティーによって提供されるsearchCtrlを使用する必要があります(ctrlの変更は好ましくありません)。

file 1; 
angular.module('app.core') 
    .directive('profilePage', DirectiveFunction1); 
function DirectiveFunction1 (config,service) { 

    var directive = { 
     restrict: 'E', 
     templateUrl: 'components/search1.html', 
     controller: 'searchCtrl', 
     link:function (scope, element, attrs) {} 

     } 
     return directive; 
} 

file 2; 
angular.module('app.core') 
    .directive('contactPage', DirectiveFunction2); 
function DirectiveFunction2 (config,service) { 

    var directive = { 
     restrict: 'E', 
     templateUrl: 'components/search2.html', 
     controller: 'searchCtrl', 
     link:function (scope, element, attrs) {} 
     } 
     return directive; 
} 

私seachCtrlは

angular.module('asApp').controller('searchCtrl', ['$scope', 'service', function($scope, AppService, qVarService) { 

axisAPI.object() 
     .app(service.app()) 
     .qId('abcd') 
     .on('create',function(object) { 
      object.paint(); 
     }).on('paint',function(data){ 
      $scope.$apply(function(){ 
            $scope.profile = data.profile; 
            $scope.contacts = data.profile; 
       }) 
     }).create(); 

ので、2つの成分のプロファイルとの接点と共通のコントローラのように見えます。私の機能として、 "searchCtrl"は2回実行されており、2つの指示文には2つの指示文が置かれているので、 の代わりに使用されます。
上記のように指定しないと、{{profile}}と{{contacts}}を別のディレクティブで使用できます。

いずれにしても、それはもっと良い方法でそれをすることを提案します。

+1

'searchCtrl'は共有されているのでサービスでなければなりません。コントローラは、要求されるたびにインスタンス化されます。あなたは 'searchCtrl'を制御していますか? – mrahhal

+0

私は混乱しています、あなたがそれをコントロールしているなら、あなたは正しい選択をしていますか?あなたが本当に 'searchCtrl'を共有したいのであれば、代わりにそれをサービスにするべきです。 – mrahhal

+0

申し訳ありません。私はsearchCtrlのコントロールにいません。 – user2587222

答えて

0

コントローラを管理していない場合は、コードをコピーしてサービスまたは工場として配置して再利用できない場合は、それとも変わるかもしれない?

+0

クールなアイデアとさまざまな考え。しかし、私の不運は、それらのAPI呼び出しがコントローラベースであるため、私はそれを使用できません。コントローラ内で初期化を行う必要があります。 – user2587222

+0

コントローラーでスコープが更新されたときに、$ watchをディレクティブで使用できますか – user2587222

関連する問題