Как настроить ui-router вложенные представления

Я пытаюсь настроить мое приложение с помощью ui-router. Я знаком с основными вложенными представлениями, но я хочу сделать что-то более сложное. У меня есть основная настройка основных видов. Я хотел бы иметь всплывающее окно чата, которое имеет свои собственные представления, которые не зависят от основных представлений. Я хочу, чтобы иметь возможность перемещаться по основным представлениям и не влиять на состояния в всплывающем окне чата. Итак, как это делается? Нужно ли мне иметь абстрактное состояние для чата? а затем у вас есть вложенные представления?

вот визуальный. layout

и вот плукер

plunker

 $stateProvider
    .state('root', {
      abstract: true,
      views: {
        '@': {
            template: '<ui-view />',
            controller: 'RootCtrl',
            controllerAs: 'rootCtrl'
        },
        '[email protected]': {
            templateUrl: 'header.html',
            controller: 'HeaderCtrl',
            controllerAs: 'headerCtrl'
        },
        '[email protected]': {
            templateUrl: 'footer.html',
            controller: 'FooterCtrl',
            controllerAs: 'footerCtrl'
            }
       }
    })
    .state('root.home',{
        parent:'root',
        url:'/home',
        templateUrl:'home.html',
        controller: 'HomeController',
        controllerAs:'homeCtrl'
    })
     .state('root.about',{
        parent:'root',
        url:'/about',
        templateUrl:'about.html'
    });
});

Ответ 1

Создайте службу/функцию чата с контроллерами в разных js файлах и введите index.html и script.js. используйте загрузочный лоток для всплывающих чатов.

Глядя на @plunkr, вы на правильном пути, хотя контроллер ввода из script.js через controllerAs не масштабируется для большего приложения.

Вместо этого вы можете создавать файлы js для каждого контроллера и службы и отдельные частичные представления, просто нужно добавить службы и контроллеры в index.html и указать частичные представления в функции stateprovider.

Ответ 2

Я предлагаю не использовать нижний колонтитул как ui-view, потому что он полностью не зависит от ваших состояний.

Затем как?

Сделайте нижний колонтитул частью шаблона и используйте ng-include для рендеринга вашей нижней части.

<footer ng-include="'/footer.html'"></footer>

И внутри footer.html вы можете указать контроллер для просмотра нижнего колонтитула.

Преимущества

  • Не нужно обрабатывать нижний колонтитул в каждом состоянии.
  • Не нужно передавать историю чата при каждом изменении состояния.

Ответ 3

Я не уверен, хотите ли вы использовать маршрут для чата, но есть два способа для вас:

  • Использовать модалы, которые могут сжиматься и открываться при нажатии на кнопку facebook здесь Моды для начальной загрузки

  • Используйте углы ngHide ngShow

    Для вашей навигации во время использования на вспомогательных элементах в чате вы можете создать одно состояние для чата и навигации в чате чата в своем состоянии чата, чтобы любое изменение состояния не изменило ваши другие состояния чата. Это означает, что вам нужно будет использовать концепции subate ui-router