Angularjs модальная служба вещания и выпуска

Я использую библиотеку https://github.com/dwmkerr/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-модал, они имеют решимость.

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);
    });
};

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

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

$scope.show = function(){
 ModalService.showModal({
       ....
       // Listen for broadcast event
 });
 SomeService.testFunction();
}
Другие вопросы по тегам