Ionic / AngularJS - глобальный модал с контроллером

0

Потерпи меня со мной - я - ангелочек.

У меня есть форма, которую я хочу быть доступной из любого места в моем приложении, и я пытаюсь понять, как ее кодировать. Моя текущая попытка состоит в том, чтобы превратить модальный в сервис, например:

.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, поэтому он не захватывает широковещательное событие.

  • 0
    Может быть, это могло бы помочь
  • 0
    Это кажется другой проблемой, чем я имею дело. Я не пытаюсь поделиться контроллером.
Теги:
ionic-framework

1 ответ

0
Лучший ответ

Когда вы объявляете услугу, вам нужно вернуть себя в выражении углов, т.е. 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});
  }
})
  • 0
    Хорошо, но ваш код будет загружать модальные при NewObjectController - как я могу запустить это с другого контроллера?
  • 0
    Я отредактировал код, чтобы вы могли использовать $ rootScope. $ On и $ rootScope. $ Emit для связи между контроллерами
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню