Директива AngularJS не может найти требуемый контроллер - PullRequest
0 голосов
/ 18 октября 2018

Суть этого в том, что в приведенном ниже коде мне нужен 'modalDirective' для доступа к списку создаваемых элементов, который находится внутри 'modalController'.Мне также нужен 'modalDirective', чтобы создать элемент HTML, который использует ng-модель для привязки к переменной области действия внутри 'modalController', поэтому, если есть какой-либо другой способ сделать что-либо из этого, я полностью открыт для него.

Я открываю модал, используя следующие параметры:

var modalOptions = {
    templateUrl: 'targetUrl/modalPage.html',
    controller: 'modalController'
}
ModalDialogFactory.openModal(modalOptions);

ModalDialogFactory действительно просто открывает модал:

angular.module('myApp')
.factory('ModalDialogFactory', ['$modal', '$rootScope', function ($modal, $rootScope) {
    var modalDialogDefaults = {
        backdrop: 'static',
        keyboard: false,
        scope: $rootScope.$new()
    };
    var modalInstance;
    return {
        showModal: function (modalOptions) {
            var modalConfig = {};
            angular.extend(modalConfig, modalDialogDefaults, modalOptions);
            modalInstance = $modal.open(modalConfig);
            return modalInstance.result;
        },
        closeModal: function (selectedObjs) {
            if (modalInstance != null) {
                modalInstance.close(selectedObjs);
            }
        }
    };

}]);

Модал открывается, и контроллер работает нормально.Все идет нормально.Теперь на целевой странице я хочу использовать директиву:

angular.module('myApp').directive('modalDirective', function ($q, $http, $compile) {
return {
    restrict: 'EAC',
    compile: function(element, attr) {
              return function(scope, element, attr) {
              // Dynamically create new HTML elements   
    }
};
});

А затем в modalPage.html я ссылаюсь на модальную директиву:

<div modal-directive></div>

Это тоже работает, директивасоздает динамические элементы HTML, как и ожидалось.Проблема возникает, когда я хочу связать один из этих элементов с переменной области действия внутри 'modalController'.Похоже, что директива не имеет доступа к контроллеру, что, как мне показалось, является проблемой, но я не уверен, в чем проблема.Я попытался добавить эту строку в 'modalDirective':

require: '^^modalController',

Но когда я пытаюсь и требую контроллер, я получаю ошибку:

Error: [$compile:ctreq] Controller 'modalController', required by directive 'modalDirective', can't be found!

Кто-нибудь знает, куда я идунеправильно?

1 Ответ

0 голосов
/ 24 апреля 2019

(Предположим, используя uibModal или другой $ модальный, который разрешает разрешение)

Я знаю, что это поздно для вечеринки, но натолкнулся на это, просматривая некоторые старые задачи.Проблема с вашим требованием заключается в том, что служба $ modal добавляет модальную запись в HTML вне области контроллера (если контроллер не является полной страницей, что кажется маловероятным).

Вместо ожидания области действиячтобы быть пропущенным, вы, вероятно, захотите воспользоваться атрибутом разрешения $ modal configuration.Таким образом, вы бы сделали что-то вроде:

  • Создайте модальные опции, передав свойства в атрибуте разрешения
  • Делайте ваши модальные вещи
  • Возвращайте любые обновления через$ modalInstance.close (), который вы уже выполняете

В итоге получится что-то вроде:

ModalDialogFactory.showModal({
    resolve: {
        listOfStuff: function() { return $scope.list; }
    }
});

, что даст вам scope.listOfStuff для работы вваша директива.

...