tabs页面跳转子页面,隐藏tabs;返回tabs页面,显示tabs问题
2018-01-26 16:08
405 查看
问题界面效果如下:
解决方法1
适用情况:tabs页面有且仅有一个tabs。
步骤:在app.module.ts,imports中的【IonicModule.forRoot(MyApp)】替换成如下代码
效果:
缺点:如果有多个tabs的话,只会隐藏最内层的tabs
解决方法2
适用情况:tabs页面有且仅有一个底部tabs
步骤:在子页面添加如下代码
export class HomePage {
...
constructor(...) {
let elements = document.querySelectorAll(".tabbar");
if (elements != null) {
Object.keys(elements).map((key) => {
elements[key].style.display = 'none';
});
}
}
ionViewDidLeave(){
let elements = document.querySelectorAll(".tabbar");
if (elements != null) {
Object.keys(elements).map((key) => {
elements[key].style.display = 'flex';
});
}
}
...
}
效果:
缺点:如果有多个tabs的话,跳转子页面隐藏所有tabs没有问题,返回tabs页面,顶端tabs会遮住页面内容。问题如下图
解决方法3
适用情况:tabs页面有多个tabs
步骤:(说明:tabs页面有底部tabs,my-test页面有顶部tabs,about页面是两个tabs中间的内容,home页面是about页面点击item后跳转的页面)
1.在tabs页面ts文件都要添加以下代码
顶部的tabs(代码中“...”省略的代码)
import {HomePage} from "../home/home";
import {AboutPage} from "../about/about";
...
export class MyTestPage {
@ViewChild('topTabs') tabRef: Tabs;
mb: any;
public orderTabs = [
{url:AboutPage,title:"全部",params: {status:''} ,number:""},
{url:AboutPage,title:"待确认",params: {status: '0' } ,number:""},
{url:AboutPage,title:"待付款",params: {status:'1' } ,number:""},
{url:AboutPage,title:"已付款",params: {status:'2' } ,number:""},
];
constructor(...,private elementRef: ElementRef,
private event: Events,private renderer: Renderer) {
}
...
ionViewDidLoad(){
let tabs = this.queryElement(this.elementRef.nativeElement, '.tabbar');
this.event.subscribe('hideTabs1', () => {
this.renderer.setElementStyle(tabs, 'display', 'none');
let SelectTab = this.tabRef.getSelected()._elementRef.nativeElement;
let content = this.queryElement(SelectTab, '.scroll-content');
if (content != null){
this.mb = content.style['margin-top'];
this.renderer.setElementStyle(content, 'margin-top', '0')
}
});
this.event.subscribe('showTabs1', () => {
this.renderer.setElementStyle(tabs, 'display', '');
let SelectTab = this.tabRef.getSelected()._elementRef.nativeElement;
let content = this.queryElement(SelectTab, '.scroll-content');
if (content != null){
this.renderer.setElementStyle(content, 'margin-top', this.mb)
}
})
}
queryElement(elem: HTMLElement, q: string): HTMLElement {
return <HTMLElement>elem.querySelector(q);
}
}
底部的tabs(代码中“...”省略的代码)
2.进入子页面,隐藏tabs;离开子页面,显示tabs。如下代码(代码中“...”省略的代码)
效果:
缺点:代码复杂。
解决方法1
适用情况:tabs页面有且仅有一个tabs。
步骤:在app.module.ts,imports中的【IonicModule.forRoot(MyApp)】替换成如下代码
IonicModule.forRoot(MyApp,{ tabsHideOnSubPages: 'true', //隐藏全部子页面tabs backButtonText: '', backButtonIcon: 'ios-arrow-back-outline',//统一返回按钮图标 modalEnter: 'modal-slide-in', modalLeave: 'modal-slide-out', tabsPlacement: 'bottom' }),
效果:
缺点:如果有多个tabs的话,只会隐藏最内层的tabs
解决方法2
适用情况:tabs页面有且仅有一个底部tabs
步骤:在子页面添加如下代码
export class HomePage {
...
constructor(...) {
let elements = document.querySelectorAll(".tabbar");
if (elements != null) {
Object.keys(elements).map((key) => {
elements[key].style.display = 'none';
});
}
}
ionViewDidLeave(){
let elements = document.querySelectorAll(".tabbar");
if (elements != null) {
Object.keys(elements).map((key) => {
elements[key].style.display = 'flex';
});
}
}
...
}
效果:
缺点:如果有多个tabs的话,跳转子页面隐藏所有tabs没有问题,返回tabs页面,顶端tabs会遮住页面内容。问题如下图
解决方法3
适用情况:tabs页面有多个tabs
步骤:(说明:tabs页面有底部tabs,my-test页面有顶部tabs,about页面是两个tabs中间的内容,home页面是about页面点击item后跳转的页面)
1.在tabs页面ts文件都要添加以下代码
顶部的tabs(代码中“...”省略的代码)
import {HomePage} from "../home/home";
import {AboutPage} from "../about/about";
...
export class MyTestPage {
@ViewChild('topTabs') tabRef: Tabs;
mb: any;
public orderTabs = [
{url:AboutPage,title:"全部",params: {status:''} ,number:""},
{url:AboutPage,title:"待确认",params: {status: '0' } ,number:""},
{url:AboutPage,title:"待付款",params: {status:'1' } ,number:""},
{url:AboutPage,title:"已付款",params: {status:'2' } ,number:""},
];
constructor(...,private elementRef: ElementRef,
private event: Events,private renderer: Renderer) {
}
...
ionViewDidLoad(){
let tabs = this.queryElement(this.elementRef.nativeElement, '.tabbar');
this.event.subscribe('hideTabs1', () => {
this.renderer.setElementStyle(tabs, 'display', 'none');
let SelectTab = this.tabRef.getSelected()._elementRef.nativeElement;
let content = this.queryElement(SelectTab, '.scroll-content');
if (content != null){
this.mb = content.style['margin-top'];
this.renderer.setElementStyle(content, 'margin-top', '0')
}
});
this.event.subscribe('showTabs1', () => {
this.renderer.setElementStyle(tabs, 'display', '');
let SelectTab = this.tabRef.getSelected()._elementRef.nativeElement;
let content = this.queryElement(SelectTab, '.scroll-content');
if (content != null){
this.renderer.setElementStyle(content, 'margin-top', this.mb)
}
})
}
queryElement(elem: HTMLElement, q: string): HTMLElement {
return <HTMLElement>elem.querySelector(q);
}
}
底部的tabs(代码中“...”省略的代码)
import {Renderer, ViewChild, ElementRef} from '@angular/core'; import {Events, Tabs} from "ionic-angular"; export class TabsPage { ... @ViewChild('myTabs') tabRef: Tabs; mb: any; constructor(private elementRef: ElementRef,private event: Events,private renderer: Renderer) { } ionViewDidLoad(){ let tabs = this.queryElement(this.elementRef.nativeElement, '.tabbar'); this.event.subscribe('hideTabs', () => { this.renderer.setElementStyle(tabs, 'display', 'none'); let SelectTab = this.tabRef.getSelected()._elementRef.nativeElement; let content = this.queryElement(SelectTab, '.scroll-content 4000 '); if (content != null){ this.mb = content.style['margin-bottom']; this.renderer.setElementStyle(content, 'margin-bottom', '0') } }); this.event.subscribe('showTabs', () => { this.renderer.setElementStyle(tabs, 'display', ''); let SelectTab = this.tabRef.getSelected()._elementRef.nativeElement; let content = this.queryElement(SelectTab, '.scroll-content'); if (content != null){ this.renderer.setElementStyle(content, 'margin-bottom', this.mb) } }) } queryElement(elem: HTMLElement, q: string): HTMLElement { return <HTMLElement>elem.querySelector(q); } }
2.进入子页面,隐藏tabs;离开子页面,显示tabs。如下代码(代码中“...”省略的代码)
import { Events } from 'ionic-angular'; ... export class HomePage { ... constructor(private event: Events) { ... this.event.publish("hideTabs"); this.event.publish("hideTabs1"); } ionViewDidLeave(){ this.event.publish("showTabs"); this.event.publish("showTabs1"); } }
效果:
缺点:代码复杂。
相关文章推荐
- ruby -- 问题解决(五)页面返回跳转
- <a>标签跳转action并在新窗口中显示返回页面
- html关于强制显示、隐藏浏览器的滚动条,解决由于高度变化带来的滚动条影响页面宽度的问题
- jquery easyui 在子tab页中打开新tab页(关于easyUI在子页面增加显示tabs的一个问题)
- thinkphp 页面跳转不显示问题 data-ajax="false"
- 关于easyUI在子页面增加显示tabs的一个问题
- 关于加载cocos2dx动画问题,跳转页面后回来不显示,报错找不到资源
- 项目访问index.html,默认跳转到login.jsp页面,隐藏地址栏每次显示请求路径和参数,定个在域名不变
- mui解决跳转到页面返回不刷新问题
- jquery easyui 在子tab页中打开新tab页(关于easyUI在子页面增加显示tabs的一个问题)
- 关于服务端访问报错后直接跳转到错误页而不显示返回信息问题即 <customErrors> 标记的“mode”属性设置为“Off”的问题的解决方案
- 解决$.Ajax等返回数据windows.open()跳转页面遭到浏览器拦截的问题
- .Net有关问题。在GridView中添加了一个HyperLinkField,用来显示显示详细信息,请教跳转后的详细信息页面该怎样写代码
- js中跳转新页面隐藏路径参数问题
- 关于jquery mobile使用<a href="#"></a>进行页面跳转返回上一页出现空白页问题的解决
- 0812邮箱问题解决:主页点击不跳转页面在本页面显示
- webview跳转页面的返回操作不成功,死循环问题
- Symbian 程序隐藏到后台,返回到主页面,按下特定的键值显示程序。
- JBoss 系列八十八: JBoss 安全问题 - 如何隐藏 web 应用出错时页面上显示的 JBoss 信息
- 关于跳转到空白页面进行新浪微博分享,当点击取消保存到草稿时无法监听,返回空白页问题的解决方案