Трансляция модального сервиса angularjs и проблема

Я использую библиотеку angular-modal-service. Моя логика такова: когда модальное окно открыто, оно запускает функцию от SomeService и $rootScope.$broadcast от SomeService до модального контроллера, таким образом я могу отправить ресурс из службы в мой модальный контроллер. Однако он не срабатывает. Пожалуйста, помогите мне понять, что я упустил. Спасибо.

**Услуга: **

angular.module('ng-laravel').service('SomeService', function($rootScope, Restangular, CacheFactory, $http) {
     this.testFunction = function() {
        console.log("from service");
        $rootScope.$broadcast('event', {success:'success'});
     };
}

** Контроллер: **

$scope.show = function(customer_id) {

        ModalService.showModal({
            templateUrl: 'modal.html',
            inputs: {
                customer_id: customer_id
            },
            scope: $scope,
            controller: function($scope, close) {
                $scope.customer_id = customer_id;
                $scope.close = function(result) {
                    close(result, 500); // close, but give 500ms for bootstrap to animate
                };
                $scope.$on('event', function(event, data){
                    alert('yes');
                    console.log('from modal controller');
                });
            }
        }).then(function(modal) {
        SomeService.testFunction(customer_id, tour_id);
            modal.element.modal();
            modal.close.then(function(result) {
                $scope.message = "You said " + result;
            });
        });
    };

После переключения функции он работает, но ... как я могу передать данные в модальный режим? как и ui-bs-modal, у них есть разрешение.


person Hao Phung    schedule 18.03.2017    source источник
comment
вам не хватает return this; в вашем сервисе?   -  person Prashant Ghimire    schedule 18.03.2017
comment
@PrashantGhimire нет необходимости возвращать this из службы .. service вернет this (контекст) функции неявно   -  person Pankaj Parkar    schedule 18.03.2017
comment
Рад узнать! @PankajParkar;)   -  person Prashant Ghimire    schedule 18.03.2017


Ответы (2)


Вы транслируете событие до того, как будут привязаны события от модального контроллера. Поэтому перед трансляцией события убедитесь, что прослушиватели событий зарегистрированы (это означает, что модальный контроллер загружен). Поэтому вызовите SomeService.testFunction(); после showModal метода.

$scope.show = function(customer_id) {
    ModalService.showModal({
        templateUrl: 'modal.html',
        inputs: {
            customer_id: customer_id
        },
        scope: $scope,
        controller: function($scope, close) {
           //code as is
           //listeners will get register from here.
        }
    })
   .then(function(modal) {
       SomeService.testFunction(); //broadcasting event
    }).catch(function(error) {
      // error contains a detailed error message.
      console.log(error);
    });
};
person Pankaj Parkar    schedule 18.03.2017
comment
Вероятно, вам следует связать обещание show.modal, поскольку оно должно асинхронно получать URL-адрес шаблона. - person georgeawg; 18.03.2017
comment
@georgeawg привет, спасибо за хедз-ап, дружище. Оцените ваш улов .. :) Я упустил эту глупость;) - person Pankaj Parkar; 18.03.2017
comment
это здорово, работает. это заняло у меня пару часов. : ( - person Hao Phung; 18.03.2017
comment
Причина, по которой я помещаю его в верхнюю часть модальной открытой части, я не хочу передавать параметр в контроллер. похоже, что я должен. - person Hao Phung; 18.03.2017
comment
О каких параметрах вы говорите - person Pankaj Parkar; 18.03.2017
comment
Тогда как я могу передать некоторые параметры в эту служебную функцию, мне нужно передать некоторые данные из родительской области $ в модальную - person Hao Phung; 18.03.2017
comment
я хотел бы передать 2 переменные из контроллера $ scope - person Hao Phung; 18.03.2017
comment
@HaoPhung пройдет через angular-modal-service API и сообщит вам, спасибо :) - person Pankaj Parkar; 18.03.2017
comment
Большое вам спасибо, я прочитал их документ, нет данных о разрешении. - person Hao Phung; 18.03.2017

Вы транслируете событие до того, как модальный контроллер будет инстанциирован или создан, поскольку служебная функция вызывается перед ModalService.showModal. Попробуйте изменить порядок. Это должно работать нормально.

Внутри $scope.show попробуйте этот заказ

$scope.show = function(){
 ModalService.showModal({
       ....
       // Listen for broadcast event
 });
 SomeService.testFunction();
}
person Abhishek    schedule 18.03.2017