Интерфейс UI-Router изменяет существующие виды - программирование
Подтвердить что ты не робот

Интерфейс UI-Router изменяет существующие виды

Я пытаюсь использовать ui-router для запуска модального для определенного состояния, а не для изменения всего представления. Для этого я внедрил слегка адаптированную форму то, что указано в FAQ, поскольку я использую angular-foundation, а не бутстрап. Когда я запускаю состояние, отображается модальный режим, однако он также очищает существующие представления, даже если в моем состоянии не указано никаких видов:

.state('selectModal',
  onEnter: ($modal, $state, $sessionStorage) ->
    $modal.open(
      templateUrl: 'views/select_modal.html'
      windowClass: 'tiny'
      controller: 'SelectCtrl'
      resolve:
        options: (Restangular) -> Restangular.all('options').getList()
    )
    .result.then (result) ->
      $sessionStorage.selected = result
      $state.go 'resource', id: result.id
)

Должен ли я настраивать представления/родители для этого состояния, например. <div ui-view='modal'></div> или parent:'main' (я бы хотел, чтобы он был доступен из любого состояния без изменения этого состояния при переключении)?

4b9b3361

Ответ 1

укажите, что он имеет родительское состояние, используя ".". соглашение об именовании. (замените "parentState" на имя фактического родителя):.state('parentState.selectModal',...

Ответ 2

Рассматривали ли вы включение модального кода в службу и просто вызов этой службы в каждом контроллере, который использует модальный?

angular.module('app').service('modal', function(){

    function open(){
        $modal.open(
            templateUrl: 'views/select_modal.html',
            windowClass: 'tiny',
            controller: 'SelectCtrl',
            resolve: {
                options: function(Restangular) { Restangular.all('options').getList() }
            }
        ) // .result... if it generic, otherwise put it in the controller
    }
});

angular.module('myapp').controller('main', function($scope, modal){

    modal.open().result.then(function(result) {
        $sessionStorage.selected = result;
        $state.go('resource', id: result.id);
    });

}