Потерпи меня со мной - я - ангелочек.
У меня есть форма, которую я хочу быть доступной из любого места в моем приложении, и я пытаюсь понять, как ее кодировать. Моя текущая попытка состоит в том, чтобы превратить модальный в сервис, например:
.service('NewObjectService', function() {
var svc = this;
svc.showModal = function() {
$ionicModal.fromTemplateUrl('template.html', {
scope: null, // what should I do here?
animation: 'slide-in-up'
}).then(function(modal) {
svc.modal = modal;
modal.show();
});
}
})
.controller('NewObjectController', function() {
$scope.$on('$ionicView.enter', function() {
console.log('NewObjectController');
// setup new object
})
})
Затем из любого места в моем приложении я могу вызвать NewObjectService.showModal()
и модальные всплывающие окна. Эта часть работает.
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу запустить мой контроллер, поэтому инициализация никогда не будет вызвана, а мой новый объект будет нулевым.
Кажется, что я должен на самом деле вызывать модальный из NewObjectController
для настройки области, но я пробовал это, и я не мог понять, как вызвать этот контроллер из других контроллеров - следовательно, это сервис.
Я знаю, что я просто делаю что-то принципиально неправильное, но я не уверен, что это такое. Любая помощь?
Обновление: я также просто попробовал вызывать один контроллер из другого с помощью широковещательной области корня:
.controller('MainCtrl', function() {
this.showModal = function() {
$rootScope.$broadcast('new_object:show_modal');
}
})
.controller('NewObjectCtrl', function() {
$rootScope.$on('new_object:show_modal', function() {
// show modal
})
})
Проблема, с которой я столкнулся, заключается в том, что NewObjectCtrl не запускался во время выполнения MainCtrl, поэтому он не захватывает широковещательное событие.
Когда вы объявляете услугу, вам нужно вернуть себя в выражении углов, т.е. Var svc = {}; return svc; Вызовите svc.showModal с любого контроллера после того, как вы ввели эту услугу и перешли в область. Вызовите контроллер с другого контроллера с помощью $ rootScope. $ On (приемник) и $ rootScope. $ Emit (from)
.service('NewObjectService', function($ionicModal) {
var svc = {};
svc.showModal = function(_scope) {
$ionicModal.fromTemplateUrl('template.html', {
scope: _scope, // passing in scope from controller
animation: 'slide-in-up'
}).then(function(modal) {
svc.modal = modal;
modal.show();
});
}
return svc;
})
.controller('NewObjectController', function($scope, $rootScope, NewObjectService) {
// fires off when $rootScope.$emit('ShowModal') is called anywhere
$rootScope.$on('ShowModal', function(data) {
NewObjectService.showModal(data._scope);
});
})
.controller('OtherController', function($scope, $rootScope) {
$scope.contactOtherController = function() {
// contact the other controller from this controller
$rootScope.$emit("ShowModal", {scope: $scope});
}
})
NewObjectController
- как я могу запустить это с другого контроллера?