Angular: функция области вызова в частичном шаблоне включена через ng-include

У меня есть анонимный контроллер в директиве. Этот контроллер при определенном событии открывает общий диалог и предоставляет частичный шаблон, который используется для добавления некоторых кнопок в общий диалог через ng-include.

Теперь в общем диалоговом окне, когда пользователь нажимает любую из предоставленных кнопок, я хочу вызвать определенную функцию в анонимном контроллере. Любые мысли о том, как это может быть достигнуто?

Контроллер:

angular.module('abc')
.directive('xyz', [function() {
  return {
    restrict: 'E',
    scope: {},
    controller: ['$scope', function($scope) {
       $scope.callThisFunc = function(){};
    }]
  }
}

Частичный шаблон:

<div>
<button label="CANCEL"
           ng-click="callThisFunc()">
</button>
</div>

Общий шаблон диалогового окна (другой модуль, чем модуль abc выше):

<div ng-include="partial"></div>

person AshD    schedule 26.10.2016    source источник
comment
Я не совсем уверен, почему вы используете директиву там, но если вы действительно используете директиву где-то в представлении, вы не получите доступ к методу callThisFunc, потому что директива имеет scope: {}specified, что создает изолированную область . Я бы либо попытался установить scope в false, либо просто создал контроллер с объявлением контроллера (не директивой)   -  person martskins    schedule 26.10.2016
comment
Спасибо. Я попытался установить для области видимости значение false, которое по-прежнему не вызывает функцию. Я не хочу менять это на объявление контроллера, потому что это потребует много изменений в коде, который у меня есть, но если это единственный способ сделать это, то я думаю, мне придется пойти по этому пути.   -  person AshD    schedule 26.10.2016
comment
Я не уверен, должно ли это работать или нет, так как я не вижу полный html-код. Но я предполагаю, что дело в том, что вы, кажется, вообще не используете директиву. Если вы можете получить свой код на скрипке, я буду рад взглянуть на него.   -  person martskins    schedule 26.10.2016
comment
Еще раз спасибо. Общий диалог находится в DOM во всех точках, за исключением того, что я изменяю видимость диалога. Я пытаюсь создать скрипку, но это большое приложение, и я не уверен, как создать простой пример скрипки (я новичок в Angular и JS). Я обновлю скрипку в ближайшее время   -  person AshD    schedule 27.10.2016
comment
Я имел в виду, что общий диалог и xyzCtrl всегда находятся в DOM.   -  person AshD    schedule 27.10.2016


Ответы (1)


Попробуйте использовать синтаксис «controllerAs»

angular.module('abc')
.directive('xyz', [function() {
  return {
    restrict: 'E',
    scope: {},
    controller: function() {
       var vm = this;

       vm.callThisFunc = function(){};

       return vm;
    }],
    controllerAs: 'xyzCtrl'
  }
}

частичный шаблон

<div>
<button label="CANCEL"
           ng-click="xyzCtrl.callThisFunc()">
</button>
</div>

общий шаблон диалога

<div ng-include="partial" xyz></div>
</div>
person Vladislav Mozhayskiy    schedule 26.10.2016
comment
Я думаю, что ограничение должно быть либо EA, либо A, чтобы использовать его, как вы предложили. - person martskins; 26.10.2016
comment
Спасибо за ответ. Я попробовал то, что вы предложили, и функция callThisFunc в xyzCtrl не вызывается. Похоже, область действия частичного шаблона — это общий диалог. - person AshD; 26.10.2016