> 위챗 애플릿 > 미니 프로그램 개발 > 소규모 프로그램 개발 시 발생하는 몇 가지 문제를 요약하고 공유합니다. (함정 방지에 도움이 됨)

소규모 프로그램 개발 시 발생하는 몇 가지 문제를 요약하고 공유합니다. (함정 방지에 도움이 됨)

青灯夜游
풀어 주다: 2022-03-04 19:47:31
앞으로
3269명이 탐색했습니다.

이 글은 이전에 WeChat 미니 프로그램을 개발할 때 겪은 몇 가지 문제를 요약하고 해결 방법을 여러분과 공유합니다. 모두에게 도움이 되기를 바랍니다!

소규모 프로그램 개발 시 발생하는 몇 가지 문제를 요약하고 공유합니다. (함정 방지에 도움이 됨)

미니 프로그램의 최신 문서를 참고하세요~:

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

목록 렌더링 시 사용 blockblock 包裹

<block wx:for="{{[1, 2, 3]}}">
  <view> {{index}}: </view>
  <view> {{item}} </view>
</block>
로그인 후 복사

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

写一个自定义组件

自定义组件分为 4 部分

  • properties 组件接收的属性

properties: {
  // 输入框的默认提示
  placeholder: {
	type: String,  // 属性值的类型
	value: &#39;&#39;      // 属性默认值
  }
},
로그인 후 복사
  • data 组件数据

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

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

调用父组件传入的方法

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

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

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

子组件中获取 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)
	})
})
로그인 후 복사

页面返回时不会调用 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>
로그인 후 복사

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>
로그인 후 복사

block은 실제로 페이지에 렌더링되지 않습니다. 이는 랩핑 요소로만 사용되며 제어 속성을 허용합니다.

  • Write 사용자 정의 구성 요소

  • 사용자 정의 구성 요소는 4부분으로 나뉩니다

properties 구성 요소가 받은 속성
  • 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();
    	}
    },
    로그인 후 복사

  • 데이터 구성 요소 데이터

메서드 구성 요소 메서드, 일반 내부 메서드는 _로 시작합니다.

컴포넌트 일반적으로 준비된 Life Cycle 기능은 컴포넌트 레이아웃이 완료된 후 실행됩니다. 이때 노드 정보를 얻을 수 있습니다(SelectorQuery )

원천:juejin.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿