У меня есть анимированный фон, который я хочу сохранить в разных государствах. Это означает, что если я переключаюсь с состояний, фон в спине должен оставаться неизменным (только перемещение содержимого состояний).
Я использую 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');
});
Связанные с этим вопросы 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>
Проверьте это в действии здесь
В случае, если мы хотим иметь абстрактное состояние (называемое '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: вложенных состояний и вложенных представлений
Попробуйте ниже фрагмент кода. 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');
});