小さなプログラムの開発で遭遇するいくつかの問題を要約して共有します (落とし穴を避けるために)
この記事は、以前に WeChat ミニ プログラムを開発するときに遭遇した問題のいくつかを要約し、その解決策を共有します。
最新のミニ プログラム ドキュメントを参照してください~:
https://developers.weixin.qq.com/ebook?action= get_post_info&docid=0008aeea9a8978ab0086a685851c0a&highline=webview
#block
を使用してリストをラップします
<block wx:for="{{[1, 2, 3]}}"> <view> {{index}}: </view> <view> {{item}} </view> </block>
block
は実際にはページ上にレンダリングされませんが、ラッピング要素としてのみ使用され、コントロール属性を受け入れます
カスタム コンポーネントを作成します
カスタム コンポーネントは 4 つの部分に分かれています
#properties コンポーネントが受け取るプロパティ
properties: { // 输入框的默认提示 placeholder: { type: String, // 属性值的类型 value: '' // 属性默认值 } },
-
data コンポーネント データ
methods コンポーネント メソッド (通常、内部メソッドは __
ライフ サイクルで始まります)コンポーネントの関数、通常はreadyを使用、コンポーネントのレイアウトが完了した後に実行、このときノード情報を取得できます(SelectorQueryを使用)
親コンポーネントによって渡されたメソッドを呼び出します
// 子组件 var myEventDetail = {value: ''}; // detail对象,提供给事件监听函数,写需要传给外面的数据 var myEventOption = {} // 触发事件的选项 this.triggerEvent('onclear', 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('#search-bar');
searchBar.setData({ value: e.currentTarget.dataset.name })
searchBar.onClickSearch({ detail: {value: e.currentTarget.dataset.name}});
// 获取屏幕宽度 let windowWidth = wx.getSystemInfoSync().windowWidth // 在组件内部需要写 this let query = wx.createSelectorQuery().in(this); let that = this; query.selectAll('.tagItem').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に呼び出し、記事リストから詳細ページに入り、詳細ページの左上隅をクリックしてリストページに戻ると、リストページの閲覧数が更新されるはずですが、更新されません記事リストのインターフェースが再調整されていないため。
つまり、記事リストのインターフェースを調整する部分はonShowで書かれています。#カスタム タブバーの最適化
最初の最適化は、コンポーネントによってカプセル化されたタブバーをページのテンプレート フォームに変更することです 1. 以前はコンポーネント形式で記述していましたが、テンプレートに変更されました。タブバーをクリックすると点滅する問題を解決するために、タブバー上のアイコンは iconfont に変更されました。
<template name="tabbar"> <view class="tabbar-wrapper"> <block wx:for="{{tabbar.list}}" wx:key="item"> <navigator hover-class="none" class="tabbar_nav {{item.selected ?'selected':''}}" 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='red-tag' wx:if="{{tabbar.num && index==1}}">{{tabbar.num > 99 ? '99+' : tabbar.num}}</text></view> </navigator> </block> </view> </template>
2. タブバーをクリックしたとき、ジャンプする必要があるページにジャンプする前に、前のページを破棄する必要があるため、
reLaunch は 2 番目の最適化のナビゲーター コンポーネントとタブバーのあるページで使用されます。 setData でのタブの切り替え <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><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></pre><div class="contentsignin">ログイン後にコピー</div></div>
変更点:
タブバーのあるページはコンポーネント形式に書き換えられます
コンポーネントにはマウントが完了した後のreadyメソッドしかないため、前ページのonShow、onReachBottom、onPullDownRefreshをすべて親ページに配置して
- #を呼び出しました。 ##. 発生する問題:
onPullDownRefresh: function () { if (this.data.tabbarID === this.data.tabbarList.article) { // 使用 selectComponent 找到组件实例,调用内部方法 let articlePage = this.selectComponent('#article-page'); articlePage.onPullDownRefresh(); } else if (this.data.tabbarID === this.data.tabbarList.doctor){ let doctorPage = this.selectComponent('#doctor-page'); doctorPage.onPullDownRefresh(); } else { wx.stopPullDownRefresh(); } },
ログイン後にコピー
- 他のページからボタンをクリックすると、ホームページのタブ カードに直接ジャンプします。問題が発生する可能性があります。
- アイコンフォントを使用してください
##https://www.jianshu.com/p/1cfc074eeb75iconfont.cn にログインし、zip パッケージをダウンロードします
- transfonter.org/
で .ttf ファイルを解凍します。base64 形式に変換します。
新しく作成した iconfont.wxss に style.css を書き込みます。上記のフォント ファイル パスを置き換えます。変換したばかりの Base64 を使用して
iconfont.wxss を app.wxss にインポートします- 注: コンポーネント自体のスタイルは、コンポーネント自体のスタイルには影響しません。 app.wxss. したがって、コンポーネント内で iconfont を使用する必要がある場合は、手動で行う必要があります。app.wxss または iconfont.wxss
- の左スライド効果を参照してください。 list
1. リストの親要素にイベントをバインドします ] 以上が小さなプログラムの開発で遭遇するいくつかの問題を要約して共有します (落とし穴を避けるために)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。<view
class="list-container"
wx:for="{{doctorList.list}}"
wx:key="{{index}}"
>
<view
bindtouchstart='onTouchStartListItem'
bindtouchmove='onTouchMoveListItem'
style="{{item.txtStyle}}"
>滑动的内容
</view>
<view class="backCover">滑动后显示的按钮</view>
</view>
.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;
}
onTouchStartListItem: function (e) {
// 是单指触碰
if (e.touches.length === 1) {
// 记下触碰点距屏幕边缘的x轴位置
this.setData({
startX: e.touches[0].clientX,
})
}
},
onTouchMoveListItem: function (e) {
var that = this
if (e.touches.length == 1) {
var disX = that.data.startX - e.touches[0].clientX;
var deleteBtnWidth = that.data.deleteBtnWidth;
var txtStyle = "";
if (disX < deleteBtnWidth / 4) {
txtStyle = "left:0rpx";
} else {
txtStyle = "left:-" + deleteBtnWidth + "rpx";
}
var index = e.currentTarget.id
var list = that.data.doctorList.list
list[index].txtStyle = txtStyle;
that.setData({
doctorList: {
list: list,
total: that.data.doctorList.total
}
})
}
},
onTouchEndListItem: function (e) {
var that = this
if (e.changedTouches.length == 1) {
var endX = e.changedTouches[0].clientX;
var disX = that.data.startX - endX;
var deleteBtnWidth = that.data.deleteBtnWidth;
var txtStyle = disX > deleteBtnWidth / 2 ? "left:-" + deleteBtnWidth + "px" : "left:0px";
var index = e.currentTarget.id
var list = that.data.doctorList.list
list[index].txtStyle = txtStyle;
that.setData({
doctorList: {
list: list,
total: that.data.doctorList.total
}
});
}
},

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











この記事では、中国のOUYI OKXアプリの安全なダウンロードに関する詳細なガイドを提供します。国内のアプリストアの制限により、ユーザーはOUYI OKXの公式Webサイトからアプリをダウンロードするか、公式Webサイトが提供するQRコードを使用してスキャンおよびダウンロードすることをお勧めします。ダウンロードプロセス中に、公式Webサイトのアドレスを確認し、アプリケーションの許可を確認し、インストール後にセキュリティスキャンを実行し、2要素の検証を有効にしてください。 使用中は、地方の法律や規制を遵守し、安全なネットワーク環境を使用し、アカウントのセキュリティを保護し、詐欺に対して警戒し、合理的に投資してください。 この記事は参照のみであり、投資のアドバイスを構成していません。

H5。ミニプログラムとアプリの主な違いは次のとおりです。技術アーキテクチャ:H5はWebテクノロジーに基づいており、ミニプログラムとアプリは独立したアプリケーションです。経験と機能:H5は軽量で使いやすく、機能が限られています。ミニプログラムは軽量で、インタラクティブが良好です。アプリは強力で、スムーズな経験があります。互換性:H5はクロスプラットフォーム互換性があり、アプレットとアプリはプラットフォームによって制限されています。開発コスト:H5には、開発コストが低く、中程度のミニプログラム、最高のアプリがあります。適用可能なシナリオ:H5は情報表示に適しており、アプレットは軽量アプリケーションに適しており、アプリは複雑な機能に適しています。

H5はより柔軟でカスタマイズ可能ですが、熟練したテクノロジーが必要です。ミニプログラムはすぐに開始でき、メンテナンスが簡単ですが、WeChatフレームワークによって制限されています。

互換性の問題と企業のセキュリティソフトウェアとアプリケーションのトラブルシューティング方法。多くの企業は、イントラネットセキュリティを確保するためにセキュリティソフトウェアをインストールします。ただし、セキュリティソフトウェアが時々...

H5とアプレットの選択は、要件に依存します。クロスプラットフォーム、迅速な発達、高いスケーラビリティを備えたアプリケーションの場合は、H5を選択します。ネイティブエクスペリエンス、リッチな機能、プラットフォームの依存関係を持つアプリケーションについては、アプレットを選択します。

Enterprise WechatのJSリソースキャッシュ問題に関する議論。プロジェクト機能をアップグレードするとき、一部のユーザーは、特にエンタープライズでうまくアップグレードできない状況に遭遇することがよくあります...

この記事では、2025年に更新されたBinance Virtual Currencyの売買に関する簡単なガイドを提供し、Binanceプラットフォームでの仮想通貨取引の操作手順を詳細に説明します。このガイドは、フィアット通貨購入USDT、他の通貨の通貨取引購入(BTCなど)、および市場取引や制限取引を含む販売業務をカバーしています。 さらに、このガイドは、Fiat Currency取引の支払いセキュリティやネットワーク選択などの重要なリスクを特に思い出させ、ユーザーが安全かつ効率的にバイナンストランザクションを実施するのに役立ちます。 この記事を通して、Binanceプラットフォームで仮想通貨を売買するスキルをすばやく習得し、トランザクションリスクを減らすことができます。

Lianyungang Huaguoshanの風光明媚なエリアは、Tencent Cloudと手をつないで、文化および観光産業で最初の「デュアルコアの脳」デジタルホモサピエンスを立ち上げました - モンキーキング! 3月1日、風光明媚なスポットはモンキーキングをディープシェクプラットフォームに正式に接続し、テンセントフナユアンとディープシークの2つのAIモデル機能を備えており、観光客により賢くて考慮されたサービスエクスペリエンスをもたらしました。 Huaguoshanシーニックエリアは、Tencent Hunyuanモデルに基づいて、Digital Homo SapiensのMonkey Kingを以前に発売しました。今回、Tencent Cloudはさらに、Big Model Knowledge Engineなどのテクノロジーを利用してDeepSeekに接続して「デュアルコア」アップグレードを実現します。これにより、モンキーキングのインタラクティブな能力により、より高いレベル、応答速度が高まり、理解が強くなり、より暖かさが高くなります。モンキーキングには強力な自然言語処理能力があり、観光客から質問するさまざまな方法を理解できます。
