我根据这个答案构建了我的应用程序的结构:
How to set up sidemenu with tabs in Ionic?
结合侧边菜单和标签:
我的app.js文件如下所示:
$stateProvider
.state('app', {
url: '/app',
abstract: true,
templateUrl: 'templates/menu.html',
controller: 'AppCtrl'
})
.state('app.tabs', {
url: '/tabs',
views: {
'menuContent': {
templateUrl: 'templates/tabs.html'
}
}
})
.state('app.tabs1.general', {
url: '/tabs1-general',
views: {
'general-tab': {
templateUrl: 'templates/general1.html',
controller: 'General1Ctrl'
}
}
})
.state('app.tabs2', {
url: '/tabs2',
views: {
'menuContent': {
templateUrl: 'templates/tabs2.html'
}
}
})
.state('app.tabs2.general', {
url: '/tabs2-general',
views: {
'general2-tab': {
templateUrl: 'templates/general2.html',
controller: 'General1Ctrl'
}
}
})
$urlRouterProvider.otherwise('/app/ofertas/ofertas-reporte');
当我测试在urlRouterProvider的otherwise
方法设置路径的所有路线时,一切正常,但是当我在侧栏设置路线时,URL不匹配:
这是我的菜单:
<ion-content>
<ion-list class="coloredList">
<ion-item class="sap-color" menu-close href="#/app/tabs1">
<i class="ion-compose"></i> tabs1
</ion-item>
<ion-item class="sap-color" menu-close href="#/app/tabs2">
<i class="ion-android-star"></i> tabs2
</ion-item>
...
我也尝试过ui-sref,但似乎没有任何效果。
有什么建议吗?
答案 0 :(得分:4)
路线似乎有问题,你可以尝试一下:
$stateProvider
.state('app', {
url: '/app',
abstract: true,
templateUrl: 'templates/menu.html',
controller: 'AppCtrl'
})
.state('app.tabs', {
url: '/tabs',
views: {
'menuContent': {
templateUrl: 'templates/tabs.html'
}
}
})
.state('app.tabs1', {
url: "/tabs1",
abstract: true,
views: {
'menuContent': {
templateUrl: "templates/tabs1.html",
controller: "Tabs1Ctrl"
}
}
})
.state('app.tabs1.general', {
url: '/tabs1-general',
views: {
'general-tab': {
templateUrl: 'templates/general1.html',
controller: 'General1Ctrl'
}
}
})
.state('app.tabs2', {
url: '/tabs2',
abstract: true,
views: {
'menuContent': {
templateUrl: 'templates/tabs2.html'
}
}
})
.state('app.tabs2.general', {
url: '/tabs2-general',
views: {
'general2-tab': {
templateUrl: 'templates/general2.html',
controller: 'General1Ctrl'
}
}
})
$urlRouterProvider.otherwise('/app/ofertas/ofertas-reporte');
答案 1 :(得分:3)
查看此项目:https://github.com/mircobabini/ionic-sidemenu-tabs-together我认为这可以满足您的需求。它是一个较旧的项目,可能需要一些更新,但它将作为一个起点。在codepen中有一个demo,链接在github上。
答案 2 :(得分:3)
来自我的一个旧项目。 (http://aitam.newtonjoshua.com)
文档:https://newtonjoshua.com/apps/aitam/aitam.html
所有关于使用ion-nav-view处理ui routing的问题。
<强> SideMenu: 强>
app.js:在下面的示例中,有一个 侧边菜单 ,其中包含一个视图 menuContent < / p>
menu.html:根据选择(tab1或tab2),内容menuContent将为tab1.html或tab2.html
<强> 标签: 强>
app.js: tab1包含视图 tab1-general(n),tab2包含视图 tab2-general(n)
tab1.html / tab2.html:根据选项卡的选择,将显示相应的html内容。
<强> app.js 强>
// app.js
$stateProvider
.state('app', {
url: "/app",
abstract: true,
templateUrl: "templates/menu.html",
controller: 'AppCtrl'
})
//tab1
.state('app.tab1', {
url: "/tab1",
views: {
// view name: menuContent
'menuContent': {
templateUrl: "templates/tab1.html",
controller: 'tabs1Ctrl'
}
}
})
.state('app.tab1.general1', {
url: '/general1',
views: {
// view name: tab1-general1
'tab1-general1': {
templateUrl: 'templates/tab1-general1.html',
controller: 'general1Ctrl'
}
}
})
//tab2
.state('app.tab2', {
url: "/tab2",
views: {
// view name: menuContent
'menuContent': {
templateUrl: "templates/tab2.html",
controller: 'tabs2Ctrl'
}
}
})
.state('app.tab2.general2', {
url: '/general2',
views: {
// view name: tab2-general2
'tab2-general2': {
templateUrl: 'templates/tab2-general2.html',
controller: 'general2Ctrl'
}
}
});
// if none of the above states are matched, use this as the fallback
$urlRouterProvider.otherwise('/app/home');
<强> menu.html 强>
<ion-side-menus enable-menu-with-back-views="false">
<ion-side-menu-content >
<ion-nav-bar class="bar-navy" >
<ion-nav-buttons side="left" >
<button ng-show="sideMenu" class="button button-icon button-clear ion-navicon" menu-toggle="left">
</button>
</ion-nav-buttons>
</ion-nav-bar>
<!--view name: menuContent-->
<ion-nav-view name="menuContent"></ion-nav-view>
</ion-side-menu-content>
<ion-side-menu side="left">
<ion-header-bar class="bar-navy">
<h1 class="title" style="color:white">APP NAME</h1>
</ion-header-bar>
<ion-content>
<ion-list>
<ion-item nav-clear menu-close href="#/app/tab1" class="item-icon-left">
TAB 1
</ion-item>
<ion-item nav-clear menu-close href="#/app/tab2" class="item-icon-left">
TAB 2
</ion-item>
<ion-item nav-clear menu-close href="#/app/home" class="item-icon-left">
Home
</ion-item>
</ion-list>
</ion-content>
</ion-side-menu>
</ion-side-menus>
<强> tab1.html 强>
<ion-view view-title="TAB 1">
<ion-content class="padding">
TAB 1
</ion-content>
<ion-tabs id="tab1" class="tabs-icon-bottom">
<ion-tab title="Tab 1 - General 1" icon-off="ion-ios-pie-outline" icon-on="ion-ios-pie" href="#/app/tab1/general1">
<!--view name: tab1-general1-->
<ion-nav-view name="tab1-general1"></ion-nav-view>
</ion-tab>
<ion-tab title="Tab 1 - General 2" icon-off="ion-ios-list-outline" icon-on="ion-ios-list" href="#/app/tab1/general2">
<ion-nav-view name="tab1-general2"></ion-nav-view>
</ion-tab>
</ion-tabs>
</ion-view>
<强> tab2.html 强>
<ion-view view-title="TAB 2">
<ion-content class="padding">
TAB 2
</ion-content>
<ion-tabs id="tab2" class="tabs-icon-bottom">
<ion-tab title="Tab 2 - General 1" icon-off="ion-ios-pie-outline" icon-on="ion-ios-pie" href="#/app/tab2/general1">
<ion-nav-view name="tab2-general1"></ion-nav-view>
</ion-tab>
<ion-tab title="Tab 2 - General 2" icon-off="ion-ios-list-outline" icon-on="ion-ios-list" href="#/app/tab2/general2">
<!--view name: tab2-general2-->
<ion-nav-view name="tab2-general2"></ion-nav-view>
</ion-tab>
</ion-tabs>
</ion-view>
答案 3 :(得分:2)
例如,在宣布app.tabs1.general
州之前,您的孩子状态未得到充分宣布app.tabs1
需要abstract=true
状态app.tabs1.general
。对于其他州,依此类推如下代码:
$stateProvider
.state('app', {
url: '/app',
abstract: true,
templateUrl: 'templates/menu.html',
controller: 'AppCtrl'
})
.state('app.tabs', {
url: '/tabs',
views: {
'menuContent': {
templateUrl: 'templates/tabs.html'
}
}
})
.state('app.tabs1', {
url: "/tabs1",
abstract: true,
views: {
'menuContent': {
templateUrl: "templates/tabs1.html",
controller: "Tabs1Ctrl"
}
}
})
.state('app.tabs1.general', {
url: '/tabs1-general',
views: {
'general-tab': {
templateUrl: 'templates/general1.html',
controller: 'General1Ctrl'
}
}
})
.state('app.tabs2', {
url: '/tabs2',
abstract: true,
views: {
'menuContent': {
templateUrl: 'templates/tabs2.html'
}
}
})
.state('app.tabs2.general', {
url: '/tabs2-general',
views: {
'general2-tab': {
templateUrl: 'templates/general2.html',
controller: 'General1Ctrl'
}
}
})
您还需要在HTML ui-sref
中使用等于您的状态而不是href
:
<ion-content>
<ion-list class="coloredList">
<ion-item class="sap-color" menu-close ui-sref="app.tabs1">
<i class="ion-compose"></i> tabs1
</ion-item>
<ion-item class="sap-color" menu-close href="app.tabs2">
<i class="ion-android-star"></i> tabs2
</ion-item>
...
答案 4 :(得分:2)
检查此链接http://plnkr.co/edit/T1qr0BWWbtLfHQRJQGJf?p=preview
中的其他HTML和DEMOJS:
angular.module('ionicApp', ['ionic'])
.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('app', {
url: '/app',
abstract: true,
templateUrl: 'menu.html'
})
.state('app.tabs', {
url: '/tabs',
views: {
'menuContent': {
templateUrl: 'tabs.html'
}
}
})
.state('app.tabs1-general', {
url: '/tabs1-general',
views: {
'menuContent': {
templateUrl: 'general1.html'
}
}
})
.state('app.tabs2', {
url: '/tabs2',
views: {
'menuContent': {
templateUrl: 'tabs2.html'
}
}
})
.state('app.tabs2-general', {
url: '/tabs2-general',
views: {
'menuContent': {
templateUrl: 'general2.html'
}
}
})
$urlRouterProvider.otherwise('/app/tabs');
});
HTML:
<ion-side-menus>
<ion-side-menu-content>
<ion-header-bar class="bar-header">
<button class="button button-icon icon ion-navicon" menu-toggle="left"></button>
</ion-header-bar>
<ion-nav-view name="menuContent"></ion-nav-view>
</ion-side-menu-content>
<ion-side-menu side="left">
<ion-content>
<ion-list class="coloredList">
<ion-item class="sap-color" menu-close href="#/app/tabs">
<i class="ion-compose"></i> tabs1
</ion-item>
<ion-item class="sap-color" menu-close href="#/app/tabs2">
<i class="ion-android-star"></i> tabs2
</ion-item>
<ion-item class="sap-color" menu-close href="#/app/tabs1-general">
<i class="ion-compose"></i> tabs1-general
</ion-item>
<ion-item class="sap-color" menu-close href="#/app/tabs2-general">
<i class="ion-android-star"></i> tabs2-general
</ion-item>
</ion-list>
</ion-content>
</ion-side-menu>
</ion-side-menus>