2015-10-27 3 views
1

Вот мой controllers.js файлУгловая контроллер на заказ директивы

(function(ctx,angular){ 
    'use strict'; 
    angular.module('app.controllers') 

    .controller('SearchMasterController',['$scope',function($scope){ 
     //My Code 
    }]); 

})(window, angular); 

И это мой directives.js файл

(function(ctx,angular){ 
    function ControllerFunction(){ 
     //My Controller Code 
    } 
    var directiveConfig = { 
     restrict:'E', 
     templateUrl:'path/to/acco.html', 
     controller: ControllerFunction 
    } 

    angular.module('app.directives') 
    .directive('acco', function(){ 
     return directiveConfig; 
    }); 
})(window, angular); 

Теперь мой вопрос, могу ли я использовать эту директиву acco с некоторым другим контроллером. В идеале, есть ли способ заставить его работать как

<acco ng-controller="SearchMasterController"></acco>?

Я пытался делать,

<acco> 
    <div ng-controller="SearchMasterController"></div> 
</acco> 

и это похоже на работу.

Можно ли использовать

<acco ng-controller="SearchMasterController"></acco>?

Последняя альтернатива выглядит уродливой для меня.

+0

проверить это: HTTP: // stackoverflow.com/questions/19444414/how-to-set-the-dynamic-controller-for-directives – vignesh

ответ

0

Да, вы можете использовать некоторые другой контроллер для директивы, но есть некоторые best practice

Используйте контроллер, когда вы хотите, чтобы разоблачить API для других директив. В противном случае используйте ссылку.

, как вы пытались использовать контроллер не имеет большого смысла

<!--here acco and ng-controller both are directives, 
    in your directive's 'ControllerFunction' and ng-controller's 'SearchMasterController' 
    has the same controll (scope) for 'acco' rendered html. 
    In that case your directive's controller overrite ng-controller functionality. 
    So leave 'ng-controller', 
    if you need any functionality in your directive 
    then pass those functionality using =,&,@--> 

<acco ng-controller="SearchMasterController"></acco> 
1

приятно, чтобы услышать этот тип доступа, я попробовал

<acco>hi{{name1}} 
    <div ng-controller="SearchMasterController">{{name1}}</div> 
</acco> 
<acco ng-controller="SearchMasterController">{{name1}}</acco> 
<script> 
      angular.module('myApp', []) 
        .controller('SearchMasterController', ['$scope', function ($scope) { 
          //My Code 
          console.log("search"); 
          $scope.name1 = 'james'; 
         }]) 
        .directive('acco', function() { 
         return{ 
          restrict: 'E', 
          templateUrl: 'acco.html', 
          controller: function($scope) { 
           //My Controller Code 
           console.log("cntrlr fn"); 
           $scope.name1 = 'semaj'; 
          } 
         }; 
        }); 
</script> 

@that время я получать выход as

cntrlr fn 
search 
cntrlr fn   

средство, если мы используем как

<acco>hi{{name1}} 
    <div ng-controller="SearchMasterController">{{name1}}</div> 
</acco> 

, то мы можем получить доступ к обоим контроллерам, но когда мы используем как

<acco ng-controller="SearchMasterController">{{name1}}</acco> 

мы не можем получить доступ к SearchMasterController и он не загружен также ..

Смежные вопросы