Maison > Applet WeChat > Développement de mini-programmes > Résumer et partager quelques problèmes rencontrés dans le développement de petits programmes (pour éviter les pièges)

Résumer et partager quelques problèmes rencontrés dans le développement de petits programmes (pour éviter les pièges)

青灯夜游
Libérer: 2022-03-04 19:47:31
avant
3238 Les gens l'ont consulté

Cet article résume certains des problèmes que j'ai rencontrés lors du développement de mini-programmes WeChat auparavant et partage les solutions avec vous. J'espère qu'il sera utile à tout le monde !

Résumer et partager quelques problèmes rencontrés dans le développement de petits programmes (pour éviter les pièges)

Veuillez vous référer à la dernière documentation du mini programme ~ :

https://developers.weixin.qq.com/ebook?action=get_post_info&docid=0008aeea9a8978ab0086a685851c0a&highline=webview

Utiliser lors du rendu de la liste Les wraps block block 包裹

<block wx:for="{{[1, 2, 3]}}">
  <view> {{index}}: </view>
  <view> {{item}} </view>
</block>
Copier après la connexion

block 不会真实渲染到页面上,只作为一个包裹元素,接受控制属性

写一个自定义组件

自定义组件分为 4 部分

  • properties 组件接收的属性

properties: {
  // 输入框的默认提示
  placeholder: {
	type: String,  // 属性值的类型
	value: &#39;&#39;      // 属性默认值
  }
},
Copier après la connexion
  • data 组件数据

  • methods 组件方法,一般内部方法用_开头

  • 组件的生命周期函数,一般使用 ready,在组件布局完成后执行,此时可以获取节点信息(使用 SelectorQuery

调用父组件传入的方法

// 子组件
var myEventDetail = {value: &#39;&#39;}; // detail对象,提供给事件监听函数,写需要传给外面的数据
var myEventOption = {} // 触发事件的选项
this.triggerEvent(&#39;onclear&#39;, myEventDetail, myEventOption)
Copier après la connexion
<!-- 父组件 -->
<searchbar id="search-bar" bind:onsearch="onSearch" bind:onclear="onSearch" placeholder="搜索文章内容"></searchbar>
<!-- 像绑定 bindtap 一样绑定自定义函数 -->
Copier après la connexion
// 父组件
onSearch(e){
  console.log(e.detail.value)
}
Copier après la connexion

父组件直接调用子组件的方法

// 父组件,使用 selectComponent 拿到子组件的实例,直接调用其中的方法
let searchBar = this.selectComponent(&#39;#search-bar&#39;);
searchBar.setData({ value: e.currentTarget.dataset.name })
searchBar.onClickSearch({ detail: {value: e.currentTarget.dataset.name}});
Copier après la connexion

子组件中获取 dom 宽高

// 获取屏幕宽度
let windowWidth = wx.getSystemInfoSync().windowWidth
// 在组件内部需要写 this
let query = wx.createSelectorQuery().in(this);
let that = this;
query.selectAll(&#39;.tagItem&#39;).boundingClientRect()
query.exec(function (res) {
	let allWidth = 0;
	res[0].map(item=>{
		allWidth = allWidth + item.width
		return allWidth
	})
	let length = res[0].length
	let ratioWidth = allWidth / windowWidth
	that.setData({
		allLength: length,
		iphone: ratioWidth + (length == 1 ? 0 : res[0].length * 0.0533)
	})
})
Copier après la connexion

页面返回时不会调用 onLoad

之前把调用接口的部分写到了onLoad里,从文章列表进入详情页,在从详情页点击左上角回退返回列表页,列表页的阅读数应该更新,但是没有更新,因为没有重新调文章列表接口。

所以把调文章列表接口的部分写好了onShow里。

自定义 tabbar 优化

第一次优化,将组件封装的tabbar改成页面的模版形式

1、之前用组件的形式写的,改为了 template;tabbar 上的图标都改成的 iconfont,解决点击 tabbar 时候会闪的问题

<template name="tabbar">
	<view class="tabbar-wrapper">
		<block wx:for="{{tabbar.list}}" wx:key="item">
			<navigator hover-class="none" class="tabbar_nav {{item.selected ?&#39;selected&#39;:&#39;&#39;}}"  url="{{item.pagePath}}" style="color:{{item.selected ? tabbar.selectedColor : tabbar.color}}" open-type="reLaunch">
				<view class="tab-item"><text  class="{{item.iconPath}}" style="width: {{item.iconWidth}};height: {{item.iconHeight}}"></text>{{item.text}}<text class=&#39;red-tag&#39; wx:if="{{tabbar.num && index==1}}">{{tabbar.num > 99 ? &#39;99+&#39; : tabbar.num}}</text></view>
			</navigator>
		</block>
	</view>
</template>
Copier après la connexion

2、点击 tabbar 时,需要销毁之前的页面,在跳到需要跳转的页面,所以在 navigator 组件用了 reLaunch

<homePage id="home-page" wx:if="{{tabbarID == tabbarList.home}}"  bind:onclicktab="setTabbar"  ></homePage>
<articleLibraryPage  id="article-page" wx:if="{{tabbarID == tabbarList.article}}"></articleLibraryPage>
<doclistPage  id="doctor-page" wx:if="{{tabbarID == tabbarList.doctor}}"></doclistPage>
<mePage id="me-page" wx:if="{{tabbarID == tabbarList.me}}"></mePage>
<tabbar id="tab-bar" bind:onclick="onClickTabbar"  tabbarID="{{tabbarID}}"></tabbar>
Copier après la connexion

block ne seront pas réellement rendus sur la page. Il est uniquement utilisé comme élément d'habillage et accepte les attributs de contrôle

  • Write. un composant personnalisé

  • Les composants personnalisés sont divisés en 4 parties

propriétés propriétés reçues par le composant
  • onPullDownRefresh: function () {
    	if (this.data.tabbarID === this.data.tabbarList.article) {
    	  // 使用 selectComponent 找到组件实例,调用内部方法
    	  let articlePage = this.selectComponent(&#39;#article-page&#39;);
    	  articlePage.onPullDownRefresh();
    	} else if (this.data.tabbarID === this.data.tabbarList.doctor){
    	  let doctorPage = this.selectComponent(&#39;#doctor-page&#39;);
    	  doctorPage.onPullDownRefresh();
    	} else {
    	  wx.stopPullDownRefresh();
    	}
    },
    Copier après la connexion

  • données du composant

méthodes des composants, les méthodes internes générales commencent par _

composant La fonction de cycle de vie, généralement prête, est exécutée une fois la disposition du composant terminée. À ce moment, les informations sur le nœud peuvent être obtenues (utilisez SelectorQuery )

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal