WeChatウィジェットカスタムコンポーネントtabBar、navBarを実現
8344 ワード
長い間文章を書かなかったので,手が少し生々しいので,お許しください.
最近Appプロジェクトでは、モジュールの1つを抽出してウィジェットを作成します.機能には、下部のTabバー、上部のタイトルバーが含まれています.
ここでカスタマイズを選択した理由は2つあります. narBar微信原生は戻りアイコンの設定をサポートせず、Androidではタイトルが左に表示され、iOSでは中央に表示されます. の下部にあるtabBarではクリックジャンプページはサポートされておらず、アイコンレイアウトではtabBarを超える高さはサポートされていません.
次の2枚の図は簡単に実現できる効果です.
分析ソースアドレスの実装
インプリメンテーション分析
以上の効果は私も参考にしたネット上の例を実現して、この効果の原作の分析を見ることができます.あるいは次の私の理解を見てみましょう.
WeChatウィジェットカスタムコンポーネント
公式ドキュメントアドレスweixin.qq.com/miniprogram…
カスタムコンポーネントの説明は、異なるページで繰り返し使用するために、ページ内の機能モジュールをカスタムコンポーネントとして抽象化することができる. はまた、コードメンテナンスを容易にするために、複雑なページを複数の低結合モジュールに分割することもできる.
カスタムコンポーネントの作成
最新の開発ツールでは、直接コンポーネントの作成がサポートされています.
コンポーネントテンプレートとスタイル
公式文書weixin.qq.com/miniprogram…
ページと同様に、カスタムコンポーネントには独自の
コンポーネントテンプレートには、コンポーネント参照時に提供されるサブノードを担持するための
デフォルトの
レイアウトが作成されてからスタイルの設定が開始され、ページでは
コンポーネントの
テンプレートデータバインド
Componentコンストラクタを呼び出すと、コンポーネントのプロパティ、データ、メソッドなどを指定できます.developers.weixin.qq.com/miniprogram…
上記のコードでは、
コンポーネント間通信
方法および属性は、コンポーネント triggerEvent 親コンポーネントは、thisを介してもよい.selectComponentメソッドは、サブコンポーネントインスタンスオブジェクトを取得し、コンポーネントの任意のデータとメソッドに直接アクセスできます.
コンポーネントの使用開始
ページの
ページの
カスタムtabBarコンポーネント分析
文章の上部の原作者の分析を見る.いくつかの穴を紹介します.コンポーネントの ページの を設ける必要がある.
共有ページから左上のトップページアイコンをクリックしてトップページに戻るとパスの問題に注意してください.新しい開発ツール
カスタムnavBarコンポーネント分析
ウィジェットで共有されたページには戻るボタンはありません.ユーザーが再び私たちのウィジェットに戻るために、navbarで戻るボタンとトップページに戻るボタンをカスタマイズしました.
ここでは、ウィジェットのシーン値と、グローバル変数
上部の高さに適合するために、
次に、ページの
原作者は実装アイコンの表示と非表示の一部の論理が私の予想と一致していないので、私が実装したいのは共有ページから入ってから左上隅の戻りトップページアイコンを表示し、通常は戻りボタンだけを表示することです.修正点後の
本文が終わったら、好きならいいね.
最近Appプロジェクトでは、モジュールの1つを抽出してウィジェットを作成します.機能には、下部のTabバー、上部のタイトルバーが含まれています.
ここでカスタマイズを選択した理由は2つあります.
次の2枚の図は簡単に実現できる効果です.
分析ソースアドレスの実装
インプリメンテーション分析
以上の効果は私も参考にしたネット上の例を実現して、この効果の原作の分析を見ることができます.あるいは次の私の理解を見てみましょう.
WeChatウィジェットカスタムコンポーネント
公式ドキュメントアドレスweixin.qq.com/miniprogram…
カスタムコンポーネントの説明
カスタムコンポーネントの作成
最新の開発ツールでは、直接コンポーネントの作成がサポートされています.
components
ディレクトリを作成し、ここでtabbar
ディレクトリを作成し、右クリックして Component
ディレクトリを選択し、コンポーネント名を入力します.たとえば、ここでtabbar
と入力します.コンポーネントテンプレートとスタイル
公式文書weixin.qq.com/miniprogram…
ページと同様に、カスタムコンポーネントには独自の
wxml
テンプレートとwxss
スタイルがあります.コンポーネントテンプレートには、コンポーネント参照時に提供されるサブノードを担持するための
ノードを提供することができる.この
ノードは、コンポーネントプレースホルダに相当する.デフォルトの
wxml
では、1つの
ノードのみがサポートされており、複数の
ノードをサポートするように設定できます.レイアウトが作成されてからスタイルの設定が開始され、ページでは
wxss
で定義してもよいし、コンポーネントのclass
名を設定してから、そのコンポーネントのwxss
でスタイルを定義するように呼び出すようにしてもよい.コンポーネントの
wxss
は、デフォルトではapp.wxss
スタイルはサポートされていませんが、複数の
を設定するように設定できます.テンプレートデータバインド
Componentコンストラクタを呼び出すと、コンポーネントのプロパティ、データ、メソッドなどを指定できます.developers.weixin.qq.com/miniprogram…
Component({
//
behaviors: [],
properties: {
myProperty: { //
type: String, // ( ), :String, Number, Boolean, Object, Array, null( )
value: '', // ( ),
observer(newVal, oldVal, changedPath) {
// ( ), methods , :'_propertyChange'
// newVal , oldVal
}
},
myProperty2: String //
},
data: {}, // ,
lifetimes: {
// , , methods
attached() { },
moved() { },
detached() { },
},
// , , methods
attached() { }, // attached lifetimes
ready() { },
pageLifetimes: {
//
show() { },
hide() { },
resize() { },
},
methods: {
onMyButtonTap() {
this.setData({
//
})
},
//
_myPrivateMethod() {
// data.A[0].B 'myPrivateData'
this.setData({
'A[0].B': 'myPrivateData'
})
},
_propertyChange(newVal, oldVal) {
}
}
})
上記のコードでは、
properties
とsetData
を組み合わせて動的設定データを実現することができ、methods
では、外部呼び出し、すなわちコンポーネント間の通信のための方法を定義することができる.コンポーネント間通信
方法および属性は、コンポーネント
triggerEvent
の例をthis.selectComponent
または直接取得することによって呼び出すことができる.コンポーネントの使用開始
ページの
json
ファイルにコンポーネントのパスを設定します.{
"usingComponents": {
"navbar": "/components/navbar/index",
"tabbar": "/components/tabbar/tabbar"
}
}
ページの
wxml
レイアウトに次のように追加します.//
'{{nvabarData}}'>
//
"home-page">
'margin-top: {{height}}px;margin-bottom:10px;'>
//
"{{tabbar}}">
カスタムtabBarコンポーネント分析
文章の上部の原作者の分析を見る.いくつかの穴を紹介します.
js
ファイルにはtabbar
が設定されていますが、app.json
ではtabbar
を構成する必要があります.詳細な構成は、文書上部のgithub
リンクを参照してください.onload
にもう一度wx.hideTabBar({
})
共有ページから左上のトップページアイコンをクリックしてトップページに戻ると
tabbar
が2つ現れるので、トップページにはtabbarをもう一度隠す必要があります.components
ファイルはminiprogram
で、pages
と同じレベルでなければなりません.そうしないと、コンポーネントを導入するパスでエラーが発生する可能性があります.カスタムnavBarコンポーネント分析
ウィジェットで共有されたページには戻るボタンはありません.ユーザーが再び私たちのウィジェットに戻るために、navbarで戻るボタンとトップページに戻るボタンをカスタマイズしました.
ここでは、ウィジェットのシーン値と、グローバル変数
share
を用いて、共有ページから入ってきたか否かを判断する.app.js
で処理されました.//
if (options.scene == 1007 || options.scene == 1008) {
this.globalData.share = true
} else {
this.globalData.share = false
};
上部の高さに適合するために、
wxml
レイアウトには、システムのステータスバーの高さを取得することによって得られるmargin-top
の高さも動的に設定される. getSystemInfo: function () {
let t = this;
wx.getSystemInfo({
success: function (res) {
//
t.globalData.height = res.statusBarHeight;
}
});
},
次に、ページの
data
にコンポーネントのデータとステータスバーの高さを設定します.data: {
//
nvabarData: {
showCapsule: 0, // 1 0
title: ' ', //
},
//
height: app.globalData.height * 2 + 20,
// tabbar
tabbar: {},
},
原作者は実装アイコンの表示と非表示の一部の論理が私の予想と一致していないので、私が実装したいのは共有ページから入ってから左上隅の戻りトップページアイコンを表示し、通常は戻りボタンだけを表示することです.修正点後の
wxml
は以下の通りです. '_navback' wx:if='{{!share}}'>
'/images/back.png' mode='aspectFill' class='back-pre'>
// share
'navbar-v-line' wx:if='{{share}}'>
// share
'_backhome' wx:if='{{share}}'>
'/images/icon/icon_home.png' mode='aspectFill' class='back-home'>
本文が終わったら、好きならいいね.