谈谈微信小程序中的页面栈

谈谈微信小程序中的页面栈,第1张

1wxnavigateTo跳非tabbar页面页面栈会加1,跳到tabbar页面页面栈自动清空,只剩下一个就是当前tabbar页面

2还有官网说的不能跳tabbar页面的方法是真的不能跳,用了会报错,跳不了

3页面栈是记录除tabbar之外的页面的跳转,一到tabbar就会清空页面栈,一般从tabbar往非tabbar走只会用到3,4个页面栈的层级

4微信小程序页面栈满了十个之后会怎么样?会跳不动会报错,如下图一

5使用wxredirectTo不会增加页面栈,入下图二

const pages = getCurrentPages();//获取当前的页面栈

consolelog("pages,", pages)

const prevPage = pages[pageslength - 1];//当前的page

prevPageonPullDownRefresh();//调用此页面的方法

微信小程序获取高度的方法有多种,以下是其中几种常用的方法:

1 使用wxgetImageInfo()方法获取信息,包括的宽、高等信息,代码如下:

wxgetImageInfo({

src: '路径',

success: function (res) {

consolelog(reswidth) // 宽度

consolelog(resheight) // 高度

}

})

2 使用Image对象获取高度,代码如下:

var img = new Image()

imgonload = function () {

consolelog(imgheight) // 高度

}

imgsrc = '路径'

3 使用小程序自带的组件,如image标签,通过bindload事件获取高度,代码如下:

<image src="路径" bindload="getImageHeight"></image>

getImageHeight: function (e) {

consolelog(edetailheight) // 高度

}

以上是微信小程序获取高度的几种方法,开发者可根据实际需求选择适合自己的方法。

在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。即wx:for指令用于循环数组数据,生成组件。

循环出来的每一项通过item返回,每一项对应的索引,通过index返回。

wx:key="",设置每一项唯一的标识。循环列表时,添加wx:key的好处是,将来列表发生变化时重新渲染列表的损耗为更低。

使用 wx:for-item 可以指定数组当前元素的变量名,使用 wx:for-index 可以指定数组当前下标的变量名:

条件渲染可以使用 wx:if 或 hidden 。

一般来说,wx:if 有更高的切换消耗而 hidden 有更高的初始渲染消耗。因此,如果需要频繁切换的情景下,用 hidden 更好;如果在运行时条件不大可能改变,则 wx:if 较好。

wx:if用于条件渲染:条件为真生成里面的内容,条件为假不会生成里面的内容。(每次重新生成内容)

也可以用 wx:elif 和 wx:else 来添加一个 else 块。

hidden用于条件渲染:条件为真隐藏里面的内容,条件为假显示里面的内容。(每次切换样式)

在appjson文件中添加tabBar节点。tabBar是小程序客户端底部或顶部tab栏的实现。

color: tab上的文字默认颜色,仅支持十六进制颜色。

selectedColor: tab上的文字选中时的颜色,仅支持十六进制颜色。

backgroundColor: tab的背景色,仅支持十六进制颜色。

borderStyle: tabbar上边框的颜色, 仅支持 black / white。

position: tabBar的位置,默认值是: bottom,仅支持 bottom / top。当 position 为 top 时,不显示 icon。

custom: 自定义tabBar。

list是一个数组,它定义了tab的列表。只能配置最少2个、最多5个tab。

pagePath: 页面路径,必须在 pages 中先定义。

text: tab 上按钮文字。

iconPath: 路径,icon 大小限制为 40kb,建议尺寸为 81px 81px,不支持网络。

selectedIconPath: 选中时的路径,icon 大小限制为 40kb,建议尺寸为 81px 81px,不支持网络。

跳转到普通页,可以直接通过返回按钮返回。

navigateTo()方法,用于跳转普通页面。可以直接通过返回按钮返回。

页面js文件中添加方法:

redirectTo()方法,关闭当前页面再跳转到指定页,不能通过返回按钮返回页面。该方法不能用于跳转tabBar页面。

页面js文件中添加方法:

跳转到tabBar页面,通过tabBar按钮返回。

如果要使用navigator组件跳转tabBar页面,需要设置open-type="switchTab"。

switchTab()方法,用于跳转tabBar页面。

页面js文件中添加方法:

1、首先打开微信开发工具,载入需要修改的小程序工程。

2、然后打开appjson页面,在window下写下面的代码,先用color和selectedColor设置底部菜单点击前和点击后文字的颜色。

3、然后在list中设置两个标签,其中使用pagePath和text填写一下点击跳转的路径和选项的名字。

4、最后填写点击前的图标和点击后的图标,这里每个选项用两个颜色图标,可以去找矢量图,尺寸大约在64像素左右,其中iconPath为点击前的图标,而selectedIconPath为点击后的图标。

5、最后设置好后,在左侧的预览就可以看到菜单的样式了:

参照微信小程序官方文档, 自定义tabbar ,但该文档只是实现了自定义tabbar,没有实现不同角色不同的tabbar,且官方文档中的custom-bab-bar组件中的setData方法存在在真机上不能重新渲染的bug,可能是由于缓存造成的。

本项目仓库: customtabbar 。

主要是在tab的页面组件中调用getTabBar接口后再调用setData方法,从而实现了tabbar的重新渲染。

官网地址:

>

1、tabBar

在appjson文件中添加tabBar节点。tabBar是小程序客户端底部或顶部tab栏的实现。

(1)tabBar相关属性

color:tab上的文字默认颜色,仅支持十六进制颜色。

selectedColor:tab上的文字选中时的颜色,仅支持十六进制颜色。

backgroundColor:tab的背景色,仅支持十六进制颜色。

borderStyle:tabbar上边框的颜色, 仅支持 black / white。

position:tabBar的位置,默认值是: bottom,仅支持 bottom / top。当 position 为 top 时,不显示 icon。

custom:自定义tabBar。

"tabBar": {

    "color": "#000000",

    "selectedColor": "#336699",

    "backgroundColor": "#ffffff",

    "borderStyle": "black",

    "position": "bottom"

  }

(2)list

list:tab的列表。

list 接受一个数组,只能配置最少 2 个、最多 5 个 tab。

pagePath:页面路径,必须在pages 中先定义。

text:tab 上按钮文字。

iconPath:路径,icon 大小限制为 40kb,建议尺寸为 81px 81px,不支持网络。selectedIconPath:选中时的路径,icon 大小限制为 40kb,建议尺寸为 81px 81px,不支持网络。

    "list": [

      {

        "text": "首页",

        "pagePath": "pages/index/index",

        "iconPath": "assets/icon/homepng",

        "selectedIconPath": "assets/icon/home2png"

      },

      {

        "text": "列表",

        "pagePath": "pages/list/list",

        "iconPath": "assets/icon/listpng",

        "selectedIconPath": "assets/icon/list2png"

      }

]

2、页面跳转

(1)跳转普通页面

方法① navigator组件

 <!-- 跳转到普通页,可以通过返回按钮返回 -->

 <navigator url="/detail/detail">到详情页</navigator>

方法② navigateTo()方法

navigateTo()方法,用于跳转普通页面。

<view bindtap="gotoDetail">到详情页</view>

gotoDetail(){

    //使用全局api跳转,navigateTo()方法,用于跳转普通页面

    wxnavigateTo({

      url: '/detail/detail',

    })

   }

(2)跳转tabBar页面

方法① navigator组件

如果要使用navigator组件跳转tabBar页面,需要设置open-type="switchTab"。

 <!-- 跳转到tabBar页面,不可以通过返回按钮返回。因为跳转到指定的tabBar页面后,会关闭其他所有页面 -->

<navigator url="/list/list" open-type="switchTab">到列表页</navigator>                                                                                      

方法② switchTab()方法

switchTab()方法,用于跳转tabBar页面。

  <view bindtap="gotoList">到列表页</view>

gotoList(){

    wxswitchTab({

      url: '/list/list',

    })

  }

使用kbone开发的微信小程序,只需要做稍微的修改就可以用到 web 端和 qq 小程序,很方便。

因为我之前的项目工程化程度很高,所以在刚开始用的时候因为惯性思维遇到了一些问题。

在 kbone + vue 的项目中可以使用 vue-router,但是web用一个router文件,小程序的 router 要另写。

我们在官方给出的 vue 项目模版的基础上做了一些目录调整:

现在我们要新增一个页面,文章详情页面, /article/:id ,首先我们需要在 src/article/mp/mainmpjs 中添加路由:

这里要注意:

tabbar 的配置主要写在 miniprogramconfigjs 中的 generate 属性里:

这里要注意:

所有 tabbar 的页面在注册路由时,需要有一个 / 路径,比如,我们把 article 页面作为一个 tab 页,那么我们需要改写一下注册的路由写法:

因为在微信小程序中不能直接使用 axios ,需要用 wxrequest ,而 web 端不能用 wxrequest ,所以我们需要找一个在 web 端和小程序上都能进行正常网络请求的方案。这里我们采用了 axios + adapter ,即 axios-miniprogram-adapter 。

使用的时候注意做一下环境判断:

微信小程序和qq小程序都可以用官方推荐的 rpx 做适配,我们要做的是对 web 端做一下兼容。

我们可以在 webpack 中的 sass-loader 里写一个全局变量 $isMini 做环境的区分,然后我们就可以写一个转换设计稿尺寸的方法,在这个方法里借助前面注册的变量进行尺寸转换(假设设计稿是 750px 宽的):

这里要注意的是 rpx 和 px 的转换关系,以 iphone6 为例: 750rpx = 375px。

微信小程序也支持 rem,设置的时候需要在 miniprogramconfigjs 的 global 字段中配置:

因为我们用的是 sass,而官方模版用的是 less,这里就顺便提一下,如果要用 sass,记得要在 build 目录下的各个 webpack 文件中进行对应的 loader 配置哦。

这个库可以在小程序和 web 端都能正常使用。

要注意的是使用的时候,不要忘记引入样式文件哦:

刚接触小程序的朋友还可以看一下微信原生组件的使用,因为 kbone-ui 的文档写的不是很详细,有些还是结合原生组件的文档好理解一点。

包括内置组件的使用,也可以结合原生组件的文档使用。

微信小程序现在支持单页面自定义导航,但是 kbone 如果要自定义导航,所有页面的导航都需要自己写。

导航条分为两部分,statusbar(显示时间的部分)和 titlebar (标题栏)。

statusbar 的高度:

titlebar 的高度:

导航条的高度:

如果是用在微信小程序上,那么现在这两个 api 的使用时机不需要特别注意,但如果是同时要用在qq小程序上,就需要注意使用的时机啦,如果直接在计算属性或者 created 中使用会出现报错,取不到内容的情况。

我是在created 中用了 settimeout 延迟使用这两个 api来解决这个问题的。

getMenuBarRect 这个方法是参考了网上找到的一个作者的方法,做了点修改,修改后可以正常使用,但是有个问题,因为 systeminfo 一开始取不到值,会用默认值,后来取到正确值时自定义头部的高度会有个突变,就是会跳一下。这个还没有优化。

比如,自定义分享内容的path要写全;

appid在微信小程序里叫appid,在qq小程序配置里叫qqappid;

微信小程序可以只设置宽度不设置高度,这样不会变形;

qq小程序只设置宽度不设置高度,会显示不出来,需要加属性 mode="widthFix" ;

页面的下拉刷新、加载中提示、上拉加载更多等配置需要在miniprogramconfigjs 里配置;

全局滚动事件也需要先配置,才能用 windowaddEventListener('scroll', () => {})

而且要取到 scrolltop 要用 documentbody$$getBoundingClientRect ;

总而言之呢就是多看文档、仔细看文档啦。

windowopen相当于 navigateTo,页面打开方式为 open;

windowlocationhref相当于redirectTo,页面打开方式为 jump;

不可否认它确实有很多方便的地方,但是在样式方面和组件支持方面简直令人抓狂。另外,编译速度和开发者工具都很慢。真的是一言难尽。今天又是修bug的一天,修到吐。

以上就是关于谈谈微信小程序中的页面栈全部的内容,包括:谈谈微信小程序中的页面栈、微信小程序如何获取图片高度信息、微信小程序开发——列表渲染 & 条件渲染 & tabBar & 页面跳转等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9401140.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存