Как настроить абстрактное состояние в качестве фона в AngularJS

0

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

Я использую UI-маршрутизатор в следующем вопросе и пробовал это (не работает):

abstract.html

<ion-view class="content-back">

<!-- animated background -->
<div id="galaxy">
  <div class="bg"></div>
  <div class="stars-back"></div>
  <div class="stars-middle"></div>
  <div class="stars-front"></div>
  <div class="bg center"></div>
</div>    

<ion-nav-view name="menuContent"></ion-nav-view>

app.js

angular.module('starter', [
  'ionic', 
  'starter.controllers', 
  'starter.services'])

.run(function($ionicPlatform) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
    }
    if (window.StatusBar) {
      // org.apache.cordova.statusbar required
      StatusBar.styleLightContent();
    }
  });
})

и часть конфигурации состояния

.config(function($stateProvider, $urlRouterProvider) {

  // Ionic uses AngularUI Router which uses the concept of states
  // Learn more here: https://github.com/angular-ui/ui-router
  // Set up the various states which the app can be in.
  // Each state controller can be found in controllers.js
  $stateProvider


   .state('abstract', {
      url: '/abstract',
      abstract: true,
      templateUrl: 'templates/abstract.html',
   })

   .state('tab.abstract', {
      url: '/dash',
     views: {
       'menuContent': {
          templateUrl: 'templates/tab-dash.html',
          controller: 'DashCtrl'
        }
      }
   })



  // if none of the above states are matched, use this as the fallback
  $urlRouterProvider.otherwise('/dash');

});
Теги:
ionic-framework
angular-ui-router

3 ответа

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

Связанные с этим вопросы Q & A: ионная маршрутизация, показывает пустую страницу

Я взял свой оригинальный плункер и приспособил его к нашим потребностям ЗДЕСЬ

Пусть эти состояния:

  .state('app', {
  //url: "/app",
  abstract: true,
  templateUrl: "tpl.tabs.html",
  controller: 'AppCtrl'
})
.state('home', {
    parent: 'app',
    url: "/app",
    ...
  })
.state('menu', {
    parent: 'app',
    url: "/menu",
    ...
})

они уже используют абстрактное состояние "приложение" с этим шаблоном "tpl.tabs.html":

<ion-tabs class="tabs-icon-top">

  <ion-tab title="Home" icon="icon ion-home" href="#/app">
    <ion-nav-view name="home"></ion-nav-view>
  </ion-tab>

  <ion-tab title="Dash" icon="icon ion-person" href="#/dash">
    <ion-nav-view name=""></ion-nav-view>
  </ion-tab>

  <ion-tab title="Menu" icon="icon ion-person" href="#/menu">
    <ion-nav-view name="menuContent"></ion-nav-view>
  </ion-tab> 

</ion-tabs>

Что уже готово для наших новых состояний:

.state('abstract', {
  parent: 'app',
  abstract: true,
  templateUrl: 'templates/abstract.html',
})
.state('dash', {
    parent: 'abstract',
    url: '/dash',
    templateUrl: 'templates/tab-dash.html',
    controller: 'DashCtrl'
})

И, как мы видим, не только "тире" имеет родительский "абстрактный" - он также имеет родительское "приложение" (это может быть просто глубокая иерархия)

И это родительский "абстрактный" контент:

<ion-view class="content-back">

    <!-- animated background -->
    <div id="galaxy">
    <div class="bg"></div>
    <div class="stars-back"></div>
    <div class="stars-middle"></div>
    <div class="stars-front"></div>
    <div class="bg center"></div>

    <ion-nav-view name=""></ion-nav-view>
    </div>

</ion-view>

Проверьте это в действии здесь

  • 0
    Спасибо за это, я попробую на следующей неделе (сейчас праздники).
2

В случае, если мы хотим иметь абстрактное состояние (называемое 'abstract') - каждый его ребенок - должен информировать UI-Router том, что такое состояние станет родителем:

.state('dash', {
    parent: 'abstract'
    url: '/dash',
    templateUrl: 'templates/tab-dash.html',
    controller: 'DashCtrl'
})

Мы использовали обозначение с parent: 'abstract', другим вариантом может быть включение этого в имя состояния .state('abstract.dash', {

Теперь, дочернее состояние, будет введено в шаблон родительского представления, поэтому он должен содержать целевой ui-view=""

<ion-view class="content-back">

    <!-- animated background -->
    <div id="galaxy">
    <div class="bg"></div>
    <div class="stars-back"></div>
    <div class="stars-middle"></div>
    <div class="stars-front"></div>
    <div class="bg center"></div>

     // e.g. here
     <div ui-view=""></div> // placeholder for child state

    </div>    
</ion-view>

Вышеупомянутые сведения касаются состояния вложения UI-Router: вложенных состояний и вложенных представлений

  • 0
    Я не понимаю этого, только государство. Я попробовал это с заменой 'div ui-view = ...' на ion-nav-view, но это тоже не работает. Я также обновил свой код с тем, как я подошел к нему.
  • 1
    Итак, я создал еще один подробный ответ с рабочим поршнем. Надеюсь, что теперь это поможет получить больше идей о государственном вложении ...
1

Попробуйте ниже фрагмент кода. Templates/abstract.html "этот шаблон будет постоянным в фоновом режиме и" templates/tab-dash2.html "," templates/tab-dash2.html "будет загружен как часть фона. Вы не можете напрямую обращаться к "/abstract" url. Вы можете получить доступ к вкладке с URL-адресами "/abstract/dash1", "/abstract/dash2".

.config(function($stateProvider, $urlRouterProvider) {

  // Ionic uses AngularUI Router which uses the concept of states
  // Learn more here: https://github.com/angular-ui/ui-router
  // Set up the various states which the app can be in.
  // Each state controller can be found in controllers.js
  $stateProvider


   .state('abstract', {
      url: '/abstract',
      abstract: true,
      templateUrl: 'templates/abstract.html',
   })

   .state('abstract.tab1', {
      url: '/dash1',
     views: {
       'menuContent': {
          templateUrl: 'templates/tab-dash1.html',
          controller: 'DashCtrl1'
        }
      }
   }).state('abstract.tab2', {
      url: '/dash2',
     views: {
       'menuContent': {
          templateUrl: 'templates/tab-dash2.html',
          controller: 'DashCtrl2'
        }
      }
   })




  // if none of the above states are matched, use this as the fallback
  $urlRouterProvider.otherwise('/dash');

});

Ещё вопросы

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