Heim > WeChat-Applet > Mini-Programmentwicklung > Fassen Sie einige Probleme zusammen, die bei der Entwicklung kleiner Programme auftreten, und teilen Sie diese mit anderen (um Fallstricke zu vermeiden).

Fassen Sie einige Probleme zusammen, die bei der Entwicklung kleiner Programme auftreten, und teilen Sie diese mit anderen (um Fallstricke zu vermeiden).

青灯夜游
Freigeben: 2022-03-04 19:47:31
nach vorne
3251 Leute haben es durchsucht

Dieser Artikel fasst einige der Probleme zusammen, auf die ich zuvor bei der Entwicklung von WeChat-Miniprogrammen gestoßen bin, und teile die Lösungen mit Ihnen. Ich hoffe, dass er für alle hilfreich sein wird!

Fassen Sie einige Probleme zusammen, die bei der Entwicklung kleiner Programme auftreten, und teilen Sie diese mit anderen (um Fallstricke zu vermeiden).

Bitte beachten Sie die neueste Dokumentation des Miniprogramms~:

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

Beim Rendern der Liste verwenden block umschließt block 包裹

<block wx:for="{{[1, 2, 3]}}">
  <view> {{index}}: </view>
  <view> {{item}} </view>
</block>
Nach dem Login kopieren

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

写一个自定义组件

自定义组件分为 4 部分

  • properties 组件接收的属性

properties: {
  // 输入框的默认提示
  placeholder: {
	type: String,  // 属性值的类型
	value: &#39;&#39;      // 属性默认值
  }
},
Nach dem Login kopieren
  • data 组件数据

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

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

调用父组件传入的方法

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

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

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

子组件中获取 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)
	})
})
Nach dem Login kopieren

页面返回时不会调用 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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

block wird nicht tatsächlich auf der Seite gerendert. Es wird nur als Umbruchelement verwendet und akzeptiert Steuerattribute

  • Write eine benutzerdefinierte Komponente.

  • Komponente Die normalerweise fertige Lebenszyklusfunktion wird ausgeführt, nachdem das Komponentenlayout abgeschlossen ist. Zu diesem Zeitpunkt können die Knoteninformationen abgerufen werden (verwenden Sie SelectorQuery

    )

Rufen Sie die von der übergeordneten Komponente übergebene Methode auf
  • 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();
    	}
    },
    Nach dem Login kopieren
    <view  
    	class="list-container"
    	wx:for="{{doctorList.list}}"
    	wx:key="{{index}}"
    >
    	<view
    		bindtouchstart=&#39;onTouchStartListItem&#39;
    		bindtouchmove=&#39;onTouchMoveListItem&#39;
    		style="{{item.txtStyle}}"
    	>滑动的内容
    	</view>
    	<view class="backCover">滑动后显示的按钮</view>
    </view>
    Nach dem Login kopieren
    .list-container{
    	position: relative;
    	width:100%;
    	height: 224rpx;
    	overflow: hidden;
    }
    .list-item{
    	position: absolute;
    	left: 0;
    	z-index: 5;
    	transition: left 0.2s ease-in-out;
    	background-color: #fff;
    }
    .backCover{
    	box-sizing: border-box;
    	width: 200rpx;
    	height: 218rpx;
    	position: absolute;
    	right: 0;
    	top: 0;
    	z-index: 4;
    }
    Nach dem Login kopieren

    Die übergeordnete Komponente ruft direkt die Methode der untergeordneten Komponente auf
  • Zuvor , Ich habe den Teil zum Aufrufen der Schnittstelle in onLoad geschrieben, die Detailseite aus der Artikelliste eingeben und dann aus der Detailseite auf die obere linke Ecke der Seite klicken, um zur Listenseite zurückzukehren aktualisiert werden, es wird jedoch nicht aktualisiert, da die Artikellistenoberfläche nicht neu angepasst wurde.

    Der Teil zum Anpassen der Artikellistenschnittstelle ist also in onShow geschrieben.

Benutzerdefinierte Tabbar-Optimierung

Die erste Optimierung besteht darin, die komponentengekapselte Tableiste in die Vorlagenform der Seite zu ändern

1. Was zuvor in Form von Komponenten geschrieben wurde, wurde in eine Vorlage geändert Die Tableiste wurde geändert. Die Symbolschrift wurde erstellt, um das Problem des Blinkens beim Klicken auf die Tableiste zu lösen reLaunch wird in der Navigatorkomponente verwendet
Verwandte Etiketten:
Quelle:juejin.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage