2014-08-27 5 views
0

В моем коде я в настоящее время это:Как передать параметр xx в «controller as xx» в директиву?

<button id="retrieveButton" 
    ng-disabled="!home.forms.grid.$pristine" 
    ng-click="exam.retrieve(exam.configService.admin.examStatusId, exam.configService.admin.examTypeId, 1)"> 
    Retrieve 
    <span class="fa fa-fw mlr75" 
     ng-class="{'fa-spin fa-spinner': exam.stateService.action['retrieve'], 'fa-download': !exam.stateService.action['retrieve'] }"> 
    </span> 
</button> 

и

<button id="retrieveButton" 
    ng-disabled="!home.forms.grid.$pristine || content.stateService.action['init']" 
    ng-click="content.retrieve(content.configService.admin.contentCreatedBy, content.configService.admin.contentModifiedBy, content.configService.admin.contentStatusId, content.configService.admin.contentTypeId, 1 )"> 
    Retrieve 
    <span class="fa fa-fw mlr75" 
     ng-class="{'fa-spin fa-spinner': content.stateService.action['retrieve'], 'fa-download': !content.stateService.action['retrieve'] }"> 
    </span> 
</button> 

и больше .. со всеми одинаковыми для экзамена .. содержания и т.д., которые приходят от контроллера, как ххое исключением.

Я хочу создать директиву, которую я могу использовать для замены кода общим шаблоном. Вот то, что я создал:

app.directive('adminRetrieveButton', ['stateService', function (stateService) { 
    return { 
     scope: true, 
     restrict: 'E', 
     template: "<button id='retrieveButton'\ 
          ng-disabled='!home.forms.grid.$pristine'\ 
          ng-click='exam.retrieve(exam.configService.admin.examStatusId, exam.configService.admin.examTypeId, 1)' >Retrieve\ 
        <span class='fa fa-fw mlr75'\ 
          ng-class='{\"fa-spin fa-spinner\": exam.stateService.action[\"retrieve\"], \"fa-download\": !exam.stateService.action[\"retrieve\"] }' >\ 
          </span>\ 
         </button>", 
     link: function (scope, element, attrs) { 
      scope.stateService = stateService; 
      scope.entity = attrs["entity"]; 
     } 
    }; 
}]); 

Я думаю, что это будет делать эту работу, но как я могу передать на экзамене или содержание или .. что я думаю так же, как $ scope.exam или $ scope.content?

ответ

0

вы можете передать контроллер в качестве атрибута вашей директивы.

<admin-retrieve-button ctrl="exam"></admin-retrieve-button> 

Затем в директиве, то необходимо сделать следующее:

return { 
    scope: {ctrl: '=' } 
    ... 
} 

В шаблоне вы можете получить доступ к контроллеру с ctrl

<button id='retrieveButton' ng-click='ctrl.retrieve(... , 1)'> 
+0

Спасибо обокрасть. Должен ли я полностью заменить свой «scope: true» тем, что вы написали? – 2014-08-27 15:59:29

+0

да. хотя установка области для объекта вместо установки его в true может привести к некоторому поведению. Вот статья, объясняющая разницу http://www.undefinednull.com/2014/02/11/mastering-the-scope-of-a-directive-in-angularjs/ – rob

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