开发了一年的uni-app,在这里总结一些uni-app开发中的问题,提供几个解决方法,分享给大家:

问题描述:一个主页面,需要联通一到两个子页面,子页面传值到主页面,主页面更新

问题难点:

首先我们需要一个逻辑模型(这里随便画了一个)

通过这个模型,我们可以看到一个问题,子页面的内容怎么传回主页面,怎么让这个传回的方式更安全有效,这也是这个问题的难点,我总结了三种解决方法,在这里分享给大家:

第一种:url传值

顾名思义,就是利用页面的url方法来传值,具体操作逻辑如下:

主页面:用onload事件来获取页面初始化的url值,进行页面刷新,跳转到子页面时用uni.redirectTo方法

子页面:提交事件里将数据转为url格式,跳转回主页面时用uni.redirectTo方法

案例:

主页面:

  1. <template>
  2. <view>
  3. <h1>opition.id</h1>
  4. <view @tap="totextfun">前往子页面</view>
  5. </view>
  6. </template>
  7.  
  8. <script>
  9. export default {
  10. data() {
  11. return {
  12. opition:{
  13.  
  14. }
  15. }
  16. },
  17. onLoad(data){
  18. this.opition = data
  19. },
  20. methods: {
  21. //跳转到子页面
  22. totextfun(){
  23. uni.redirectTo({ url: '/pages/text/text1'});
  24. }
  25. }
  26. }
  27. </script>
  28.  
  29. <style>
  30.  
  31. </style>

子页面:

  1. <template>
  2. <view>
  3. <view @tap="totextfun">跳转回主页面</view>
  4. </view>
  5. </template>
  6.  
  7. <script>
  8. export default {
  9. data() {
  10. return {
  11.  
  12. }
  13. },
  14. methods: {
  15. //跳转回主页面事件
  16. totextfun(){
  17. uni.redirectTo({ url: '/pages/text/text?id=11'});
  18. }
  19. }
  20. }
  21. </script>
  22.  
  23. <style>
  24.  
  25. </style>

优缺点:优点就是简单,简单,简单,这个方法的实现逻辑的优势是很简单粗暴的,但是url传值如果是微信小程序或者app还好,你要是用浏览器,那么你传过去的值会被直接显示在url里,数据不安全,而且还有一个问题,当我主页面初始化时也是有url传值过来的,那么主页面跳转到子页面时也必须要用url把值传递过去,这样写太麻烦了,一个逻辑失误会出大问题。

总结:这类方法适用于新人上手做一个dome来用,而且只能单对单页面,子页面如果归属于多个主页面,那么会出现问题(除非你用url或者vuex解决)。

第二种:返回方法传值

顾名思义,就是利用uni-app的getCurrentPages来获取当前页面与上一页面的信息,通过修改上一页面信息后返回的方法来实现,具体操作逻辑如下:

主页面:用onshow事件执行初始化事件,进行页面刷新,跳转到子页面时用uni.navigateTo方法

子页面:提交事件里将数据转为json格式,通过getCurrentPages获取到上一级页面的内容进行修改,跳转回主页面时用uni.navigateBack方法

案例:

主页面:

  1. <template>
  2. <view>
  3. <h1>opition.id</h1>
  4. <view @tap="totextfun">前往子页面</view>
  5. </view>
  6. </template>
  7.  
  8. <script>
  9. export default {
  10. data() {
  11. return {
  12. opition:{
  13.  
  14. }
  15. }
  16. },
  17. onShow(){
  18. //页面跳转回来要执行的事件
  19. },
  20. methods: {
  21. //跳转到子页面
  22. totextfun(){
  23. uni.navigateTo({ url: '/pages/text/text1'});
  24. }
  25. }
  26. }
  27. </script>
  28.  
  29. <style>
  30.  
  31. </style>

子页面:

  1. <template>
  2. <view>
  3. <view @tap="totextfun">跳转回主页面</view>
  4. </view>
  5. </template>
  6.  
  7. <script>
  8. export default {
  9. data() {
  10. return {
  11.  
  12. }
  13. },
  14. methods: {
  15. //跳转回主页面事件
  16. totextfun(){
  17. var pages = getCurrentPages();//当前页
  18. var beforePage = pages[pages.length - 2];
  19. var json = {
  20. id:11
  21. };
  22. if(beforePage !=undefined){
  23. if(beforePage.opition){//判断是否为小程序,小程序的数据都在data里
  24. beforePage.opition = json;
  25. }else{
  26. beforePage.data.opition = json;
  27. }
  28. }
  29. uni.navigateBack();
  30. }
  31. }
  32. }
  33. </script>
  34.  
  35. <style>
  36.  
  37. </style>

  

优缺点:优点是逻辑走通了,功能实现了,而且数据很安全的被传回去了,但缺点也是有的,就是如果在子页面刷新呢,因为获取不到上一级页面,代码会报错(也可以多加个判断来进行处理),但是已经没有返回上一个页面带传值的功能了。

总结:这种方法虽然有缺点,但的确很实用,排除掉页面刷新的情况,简直无懈可击,而且页面刷新的的情况也可以直接调回首页来处理,毕竟你都在子页面刷新了,主页面的东西肯定会没掉,逻辑上已经走不通了。

第三种:Vuex传值(需要学习vuex相关知识)

顾名思义,就是利用vuex来给数据提供一个暂时储存的位置,从而实现数据的流通传递。

主页面:用onshow事件来获取vuex里的值,进行页面刷新,跳转到子页面时用uni.redirectTo方法

子页面:提交事件里将数据转为json格式,通过vuex方法存到vuex的数据里,跳转回主页面时用uni.redirectTo方法

案例:

  1. <template>
  2. <view>
  3. <h1>opition.id</h1>
  4. <view @tap="totextfun">前往子页面</view>
  5. </view>
  6. </template>
  7.  
  8. <script>
  9. //导入vuexjs
  10. import vuex from "@/store/index.js";
  11. export default {
  12. data() {
  13. return {
  14. opition:{
  15.  
  16. }
  17. }
  18. },
  19. onShow(){
  20. //页面跳转回来要执行的事件
  21. this.opition = vuex.state.opition;
  22. },
  23. methods: {
  24. //跳转到子页面
  25. totextfun(){
  26. uni.redirectTo({ url: '/pages/text/text1'});
  27. }
  28. }
  29. }
  30. </script>
  31.  
  32. <style>
  33.  
  34. </style>

子页面:

  1. <template>
  2. <view>
  3. <view @tap="totextfun">跳转回主页面</view>
  4. </view>
  5. </template>
  6.  
  7. <script>
  8. //导入vuexjs
  9. import vuex from "@/store/index.js";
  10. export default {
  11. data() {
  12. return {
  13.  
  14. }
  15. },
  16. methods: {
  17. //跳转回主页面事件
  18. totextfun(){
  19. var json = {
  20. id:11
  21. };
  22. vuex.commit("setOpition",json);//调用vuex来写入json
  23. uni.redirectTo({ url: '/pages/text/text'});
  24.  
  25. }
  26. }
  27. }
  28. </script>
  29.  
  30. <style>
  31.  
  32. </style>

优缺点:优点是这个数据流程清晰,就算你刷新了也是可以达到数据流通的效果,但缺点也有,这个数据你需要一个上层入口来清除掉,不然你以后进入主页面,通用信息还是会出现。

总结:这种方式也同样很有效,适用于大型项目,它只要管理了入口,可以完美的形成一个闭环,不会有任何bug出现(反正我没出现过问题)。

以上就是我对uni-app 多页面传值的三种解决方法,如果大家有其他更有效的方法,也欢迎分享到评论区( ̄▽ ̄)~*。

uni-app开发经验分享一: 多页面传值的三种解决方法的更多相关文章

  1. React Router v4 页面传值的三种方法

    传值方法 1.props.params 使用React router定义路由时,我们可以给指定一个path,然后指定通配符可以携带参数到指定的path: <Route path='/user/: ...

  2. javascript静态页面传值的三种方法分享

    一:JavaScript静态页面值传递之URL篇能过URL进行传值.把要传递的信息接在URL上.Post.htm 复制代码 代码如下: <input type="text" ...

  3. PHP -- 页面传值的6种获取方法

    1.PHP4以后获取传值的方法 一般在页面中传值常见的是POST.GET和COOKIE几种,所以下面我也主要介绍这几种.PHP4以后都采用的是$_POST.$_GET等数组来获取网页传值.在PHP3. ...

  4. React Router页面传值的三种方法

    文章地址:https://blog.csdn.net/qq_23158083/article/details/68488831

  5. PHP页面跳转三种实现方法

    一.header()函数 header()函数是PHP中进行页面跳转的一种十分简单的方法.header()函数的主要功能是将HTTP协议标头(header)输出到浏览器.header()函数的定义如下 ...

  6. 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结

    史上最全的CSS hack方式一览 2013年09月28日 15:57:08 阅读数:175473 做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我 ...

  7. 【页面传值6种方式】- 【JSP 页面传值方法总结:4种】 - 【跨页面传值的几种简单方式3种】

    阅读目录 1. URL 链接后追加参数 2. Form 3. 设置 Cookie 4. 设置 Session JSP 页面间传递参数是项目中经常需要的,这应该算是 web 基本功吧. 试着将各种方式总 ...

  8. AppStore下载失败使用已购页面再试一次解决方法

    AppStore载失败 使用已购页面再试一次解决方法 工具/原料 Mac OS 方法/步骤 1.大家可以先试试更改系统 DNS 的方法,由于苹果的 App Store 应用商店在国外,所以 DNS 如 ...

  9. MVC控制器向View视图传值的三种方法

    首先创建一个MVC的项目,其中需要一个控制器(TestController),三个视图(index,edit,detail) 1.项目结构如下:

随机推荐

  1. 在wildfly中使用SAML协议连接keycloak

    目录 简介 OpenID Connect和SAML SAML的工作流程 在keycloak中使用SAML 准备wildfy和应用程序 简介 我们知道SSO的两个常用的协议分别是SAML和OpenID ...

  2. .net下com调用支持x86/x64

    起因 项目涉及u3d/wpf端的渲染图形合成,采用了开源项目spout,为了便捷,采用了spout的com版本作为c#端的调用 项目调整后,细节已经捋清楚了. 但是考虑桌面应用采用anypc,根据运行 ...

  3. JPA 缓存

    JPA有两种类型的缓存: EntityManager自身就是一种缓存.事务中从数据库获取的和写入到数据库的数据会被缓存(什么样的数据会被缓存,在后面有介绍).在一个程序中也许会有很多个不同的Entit ...

  4. [leetcode]187. Repeated DNA Sequences寻找DNA中重复出现的子串

    很重要的一道题 题型适合在面试的时候考 位操作和哈希表结合 public List<String> findRepeatedDnaSequences(String s) { /* 寻找出现 ...

  5. 鸿蒙HarmonyOS应用开发落地实践,Harmony Go 技术沙龙落地北京

    12月26日,华为消费者BG软件部开源中心与51CTO Harmony OS技术社区携手,共同主办了主题为"Harmony OS 应用开发落地实践"的 Harmony Go 技术沙 ...

  6. Head First 设计模式 —— 00. 引子

    Head First 学习原则 P xxx 可视化:图片使得学习效率更高,更易懂 交谈式:第一人称交谈方式讲述学习内容更易引起注意 多思考:自主思考练习题和拓展知识的问题 保持注意力集中:将知识融合进 ...

  7. 2021年了,C 语言会被淘汰吗?

    一年365天,总有那么几百天听到有人说"C语言过时了""C语言要被时代淘汰了",那么真的会被淘汰吗? C 语言发布于 1972 年,到2021年已经有49年的历 ...

  8. 数仓建设中最常用模型--Kimball维度建模详解

    数仓建模首推书籍<数据仓库工具箱:维度建模权威指南>,本篇文章参考此书而作.文章首发公众号:五分钟学大数据,公众号中发送"维度建模"即可获取此书籍第三版电子书 先来介绍 ...

  9. react项目中实现搜索关键字呈现高亮状态(一)

    最近有个需求,在一个react项目中,实现搜索关键字呈现高亮状态.这个在普通的html文件中还好操作些,在react项目中有点懵逼了,因为react项目中很少操作dom,有点无从下手.但最后还是实现了 ...

  10. 记一次flask上传文件返回200前端却504的问题

    前言 好久没写了, 主要是太忙了, 本篇记一下今天解决的一个问题吧, 耗了我大半天的时间才解决 问题 今天在调试代码时, 发现了一个诡异的问题, 我之前写了一个接口, 作用是接收上传的文件, 因为这个 ...