Ionic的页面堆栈与Tabs菜单相遇的问题(栈只有一个)

本来的需求:

新建的Ionic项目是Tabs菜单,假设有两个选项卡 A 和 B,对应的两个页面的代码完全一样,使用了echarts 插件,并且使用了一个获取页面元素的方法,给自己的一个变量赋值,然后将echarts图写入到这个元素里面。

html中
<div id="chartContainer"></div>

ts中
this.chartContainer = document.getElementById(‘chartContainer‘);

这样导致的效果是:

两个页面上的echarts图,永远只有一个展示,另一个是空白的。在A 页面切换到B 选项卡的时候,A 能展示,B 为空白;反之亦然。

最后当我把其中一个的id更改了以后,就没有这个问题了。

我的理解是:

Tabs菜单有两个,但是页面堆栈只有一个,当我打开了A 页面,栈区里记录了A 页面的元素 <div id="chartContainer"></div> 。当我再打开B 页面的时候,A 页面并没有被销毁,它在栈区的变量也就没有移出去。此时再打开B 页面,通过document.getElementById(‘chartContainer‘); 获取到的元素,仍然是A 页面中的元素。所以B 页面才会是空白的。

我觉得我的理解是正确的,如有不对,请指正!

原创文章,欢迎转载,转载请注明出处!

原文地址:https://www.cnblogs.com/acm-bingzi/p/ionicTabsStack.html

时间: 2024-10-10 22:39:20

Ionic的页面堆栈与Tabs菜单相遇的问题(栈只有一个)的相关文章

Ionic 2之页面堆栈

原作者链接:http://m.blog.csdn.net/u010730126/article/details/63254988 还记得Ionic 1中的state和router吗?他们两兄弟配合起来完成页面导航的功能,虽然它们使用起来并不算复杂## 标题 ##,概念也很清晰,不过当页面增多.state嵌套等问题出现后复杂度也会增加,当复杂程度到达一定程度时工程必然难以维护和理解.而Ionic 2效仿原生页面堆栈的概念解决了上述问题. 页面与组件 页面是应用的基石,是交互的基本单位,Ionic

ionic单页面应用中微信分享的问题总结

首先说一下 ionic 是单页面应用,也就是说整个项目就有一个index.html, 那么问题就就来了, 如果我们不同的页面要分享给大家的是不同的链接和图片,应该怎么去做呢? 这就是我们今天要总结的东西. 今天这个问题真是闹得我心烦,有必要总结下来了. 学习重点: 微信分享方法巧妙封装 监听路由事件$rootScope.$on 举一反三 微信分享 关于微信分享,大家都是在熟悉不过了,无非就是调用微信的SDK,授权,给他分享索要的东西的ok.所以对于微信分享似乎没有什么好说的,但是细心的伙伴有木有

Ionic Js十七:侧栏菜单

一个容器元素包含侧边菜单和主要内容.通过把主要内容区域从一边拖动到另一边,来让左侧或右侧的侧栏菜单进行切换. 效果图如下所示: ? ? 用法 要使用侧栏菜单,添加一个父元素,一个中间内容 ,和一个或更多 指令. <ion-side-menus> <!-- 中间内容 --> <ion-side-menu-content ng-controller="ContentController"> </ion-side-menu-content> &

整体刷新页面,保持层级菜单展开

1.引入jquery.cookie.js 2.点击菜单选项时,将菜单信息记录到cookie中 $.cookie("navstation", $(this).html(), {path: "/"}); 3.载入页面时候,处理保存到cookie中的菜单     var navstation = $.cookie("navstation");     if(navstation != null){      $(".leftsidebar_b

关于easyUI在子页面增加显示tabs的一个问题

在父页面点个链接能动态看到子页面的情况太简单,请看easyUI官网:http://www.jeasyui.com/tutorial/layout/tabs2.php 现在说的是在子页面点个按钮也能触发增加子页面的情况. 情景是,在父页面上有个div如: Html代码   <div class="easyui-tabs" id="main" fit="true" border="false"> <div tit

随笔:ajax传递数组,layui父子页面传值,下来菜单赋值,父页面数据获取,表格数据替换为字符串

一.Ajax向后台传递数组问题:(声明前台我使用的layui框架)例:我们要多前台一个数据表格进行批量删除操作,我们通过复选框选中数据id,将id存入一个数组中,然后利用ajax传递给后台,完成批量删除,再过程中我们需要加上traditional : true代码如下: function batchDel() { var datas; var ids = new Array();// 声明数组 layui.use('table', function() { var table = layui.t

ionic路由(页面切换)

ui-router 的工作原理非常类似于 Angular 的路由控制器,但它只关注状态. • 在应用程序的整个用户界面和导航中,一个状态对应于一个页面位置 • 通过定义controller.template和view等属性,来定义指定位置的用户界面和界面行为 • 通过嵌套的方式来解决页面中的一些重复出现的部位 最简单的形式 模板可以通过下面这种最简单的方式来指定 <!-- in index.html --> // in app-states.js (or whatever you want t

ionic的页面直接的跳转

$state.go页面不刷新数据 假如进入market/beian/add添加数据,保存提交后回退market/beian列表页,没有自动更新数据,必须得手动下拉刷新才会出来 $state.go("marketBeian",{},{reload:true}); 设置路由控制器 $statePrivider.state({})这个方法中的参数是对象,其中有项属性配置是cache:true/false, ,默认为true.在此,将其配置为false,此时,这个状态就不会有缓存,也就可以实现

ionic 刷新页面的几种方法

reload 方法,该方法强迫浏览器刷新当前页面. 语法:location.reload([bForceGet])  参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当前页.true, 则以 GET 方式,从服务端取最新的页面, 相当于客户端点击 F5("刷新") replace 方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,你不能通过"前进"和"后退"来访问已经被