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