[WeChat ミニ プログラム] 親子コンポーネントの作成、通信、イベント トリガー、コンポーネントのライフ サイクル

序文

WeChat ミニ プログラムの親子コンポーネントの作成と値の転送、および関連するコンポーネントのライフ サイクルについて。

コンポーネントを使用する利点

コンポーネントを使用すると、開発効率が向上し機能がページ間で一貫して適用および変更されるようになります
たとえば、上部のナビゲーション バーやコメント領域などの一部の繰り返し機能については、それらをコンポーネントに調整した後、同じコードを繰り返し記述せずに、別のページでそのコンポーネントを参照するだけで済みます。これにより、コードの量が削減され、コードの保守性が向上します。
これらの関数を変更する必要がある場合、コンポーネントが定義されている場所を変更するだけでよく、コンポーネントを参照するすべてのページが更新されるため、各ページを個別に変更する手間が省けます。

文章

作成と基本的な使い方

1.1 コンポーネントの作成
コンポーネントは通常、コンポーネントフォルダーに作成されます。
まず、コンポーネント内に新しいフォルダーを作成し、このフォルダーを右クリックして、新しいコンポーネント オプションを選択します (新しいページを自分で作成し、対応する生成された 4 つのサブファイルを、コンポーネント内に新しく作成されたコンポーネント フォルダーに移動することもできます)。作成したディレクトリ 構成は以下の通り
ここに画像の説明を挿入
1.2 コンポーネントを使用→親ページまたは親コンポーネントのjsonファイルにサブコンポーネントを登録

{
    
    
  "usingComponents": {
    
    
    "topNav": "/components/topNav/topnav"
  }
}

1.3 親ページまたは親コンポーネントにコンポーネントを適用する

<!-- 父组件中 -->
<view class="container">
    <!-- 顶部菜单 -->
    <topNav></topNav>
</view>

値を互いに渡したり、メソッドを呼び出したりする

上記の例は基本的な使用法にすぎず、親コンポーネントと子コンポーネント間の通信は含まれません。
親コンポーネントと子コンポーネント間の通信には
親コンポーネントが子コンポーネントに値を渡し、子コンポーネントが親コンポーネントに値を渡し、親コンポーネントが子コンポーネントのメソッドを呼び出し、子コンポーネントが親コンポーネントのメソッドを呼び出すことが含まれます。 。

1. 親コンポーネントが子コンポーネントに値を渡す

これは最も単純で最も一般的に使用されており、主なことは、それを受け取るためにサブコンポーネント内のプロパティを使用することに注意することです。

  1. 親コンポーネントは値を渡します:
  • childValue は、親コンポーネントから渡された値を受け取るために子コンポーネントによって使用されます。
  • parentValue は、親コンポーネントによって子コンポーネントに渡される値です。
// 父组件.wxml
<text>这是父组件Component</text>
<view>
  <ChildComponent childValue="{
    
    {parentValue}}"></ChildComponent>
</view>


// 父组件.js
Page({
    
    
	data: {
    
     parentValue : 'Parent'}
})
  1. サブコンポーネントは以下を受け取り、使用します。
// 子组件.js
// 在子组件中声明要接收的数据类型
Component({
    
    
	properties: {
    
    
		childValue: String,  // String代表接收的参数类型
	}
})

//使用父组件传递过来的数据:

// 子组件.wxml
<text>我是子组件ChildComponent</text>
<view>父组件传递过来的数据:{
    
    {
    
    childValue}}</view>

このようにして、子コンポーネントは親コンポーネントによって渡された値を受け取ることができます。

2. サブコンポーネントが親コンポーネントに値を渡す

これは比較的複雑です。
triggerEvent() メソッドを使用します。使用法は Vue の $emit() に似ています。キー コード:
this.triggerEvent('myevent', value) myevent は、対応する親コンポーネントで受信されるメソッドです。

  1. サブコンポーネントのイベントをカスタマイズし、値を渡します
// 子组件.wxml
<view class="childContent">
  <text>我是子组件ChildComponent</text>
  <button type="primary" bindtap="handleTap">给父组件传值</button>
</view>

// 子组件.js
methods: {
    
    
	handleTap() {
    
    
		// 定义要传递的数据
		let value = "ChildValue"
		// 触发绑定事件, myevent为绑定的父组件中的事件名
		this.triggerEvent('myevent', value)
	},
}
  1. 親コンポーネントに導入された子コンポーネントにイベントをバインドする
// 父组件.wxml
<view class="parentContent">
  <text>这是父组件Component</text>
  <view>
  	// 绑定子组件中`triggerEvent()`对应的事件方法
    <ChildComponent bindmyevent="myevent"></ChildComponent>
  </view>
  <view>父组件:子组件传递过来的数据 {
    
    {
    
    ParentValue}}</view>
</view>

//接收子组件传递过来的内容
// 父组件.js
methods: {
    
    
	myevent(e) {
    
    
		// 这里通过 e 就可以接收子组件传过来的内容了
		console.log(e.detail)
      	this.setData({
    
    
        	ParentValue: e.detail
		})
	}
}

3. 親コンポーネントが子コンポーネントのメソッドを呼び出します。

ID またはクラス セレクターをサブコンポーネントにバインドし、親コンポーネントで this.selectComponent を呼び出してサブコンポーネントのインスタンス オブジェクトを取得すると、サブコンポーネントでメソッドを呼び出すことができます。

実際、サブコンポーネントのインスタンス オブジェクトを取得した後、そのメソッドを呼び出して実際にそのプロパティを取得できます。

// 子组件.js
methods: {
    
    
    Foo() {
    
    
      console.log("子组件的方法");
    }
  }

// 父组件.wxml
<view class="parentContent">
  <text>这是父组件Component</text>
  <view>
    <ChildComponent class="ChildEvent"></ChildComponent>
  </view>
  <button type="primary" bindtap="ChildFoo">父组件的按钮</button>
</view>

// 父组件.js
methods: {
    
    
	// 父组件点击事件,调用子组件方法
    ChildFoo() {
    
    
    	// 获取子组件的实例,可以提前获取
      	let Child = this.selectComponent('.ChildEvent');
      	// 调用子组件中定义的方法Foo()
      	Child.Foo();
    }
}

4. 子コンポーネントが親コンポーネントのメソッドを呼び出します。

子コンポーネントは、this.triggerEvent() を通じて親コンポーネントのメソッドを呼び出します。

親コンポーネントによって導入された子コンポーネントにイベント名とメソッド名を追加します。ChildFun
は子コンポーネントのメソッド名、ParentFun は親コンポーネントのメソッド名です。
子の ChildFun を通じて親コンポーネントの ParentFun を呼び出します。成分。

// 父组件.wxml
<view>
	<ChildComponent bind:ChildFun="ParentFun"></ChildComponent>
</view>

在父组件中定义方法:
// 父组件.js
methods: {
    
    
	ParentFun() {
    
    
		console.log('父组件的方法');
	}
}

クリック イベントが子コンポーネントに追加されます。ユーザーがクリック イベント clickParent() をトリガーすると、子コンポーネントが実行されて親コンポーネントが呼び出されます。

// 子组件.js
methods: {
    
    
    clickParent() {
    
    
      this.triggerEvent('ChildFun' , )
    }
}

クリックすると、子コンポーネントは親コンポーネントで ParentFun() を実行します。

注: this.triggerEvent('親コンポーネント内の子コンポーネントにバインドされたイベント名', パラメーター (オプション)) に続く
パラメーターは、親コンポーネントのメソッドに従って入力されます。
親コンポーネントがパラメータを受け取らない場合は空白のままにし、1 つのパラメータを受け取った場合は 1 つを書き込み、2 つのパラメータには 2 つの値を渡します。

要約する

簡単な要約:

  • 親コンポーネントが子コンポーネントに値を渡す: 子コンポーネントのプロパティが受け取る
  • 子コンポーネントは値を親コンポーネントに渡します。子コンポーネントの this.triggerEvent() がトリガーされて親コンポーネントに渡されます。
  • 親コンポーネントは子コンポーネントのメソッドを呼び出します。親コンポーネントは this.selectComponent を使用して子コンポーネントのインスタンス オブジェクトを取得します。
  • 子コンポーネントが親コンポーネントを呼び出すためのメソッド: 子コンポーネント this.triggerEvent() が起動され、それを親コンポーネントに渡します。
    子コンポーネントが親コンポーネントと通信したい場合、それが渡されているかどうかがわかります。パラメータまたは呼び出しメソッドを使用すると、this.triggerEvent() を渡すことができます。
    パラメーターの受け渡しは、メソッド呼び出しの特殊なケースにすぎません。これは主に、親コンポーネントの呼び出しメソッドがこのパラメーターをどのように使用するかによって異なります。

コンポーネントのライフサイクル

詳細については、WeChat ミニ プログラムの公式ウェブサイト:ミニ プログラム公式コンポーネントのライフ サイクルをご確認ください。

コンポーネントのライフサイクルの書き方:

Component({
    
    
  lifetimes: {
    
    
    attached: function() {
    
    
      // 在组件实例进入页面节点树时执行
    },
    detached: function() {
    
    
      // 在组件实例被从页面节点树移除时执行
    },
  },
  // 以下是旧式的定义方式,可以保持对 <2.2.3 版本基础库的兼容
  attached: function() {
    
    
    // 在组件实例进入页面节点树时执行
  },
  detached: function() {
    
    
    // 在组件实例被从页面节点树移除时执行
  },
  // ...
})

実行順序については、「WeChat ミニ プログラム - コンポーネントのライフ サイクル」の記事の説明を参照してください。

要約:

  • アプレットをマウントして初期化するときは内部から外部(コンポーネントからページ)へ、アンインストールするときも内部から外部へ
  • ページがロールバックすると、コンポーネントの更新に使用できる pageLifetimes の表示をトリガーできます。

コンポーネントが配置されているページのライフサイクル

Component({
    
    
  pageLifetimes: {
    
    
    show: function() {
    
    
      // 页面被展示
    },
    hide: function() {
    
    
      // 页面被隐藏
    },
    resize: function(size) {
    
    
      // 页面尺寸变化
    }
  }
})

参考

親子コンポーネントの画像と作成については、WeChat アプレットのパブリック コンポーネントのカプセル化を参照してください。親子コンポーネントは互いに値を渡し、互いのメソッドを呼び出します。親子コンポーネントの値
渡し通信とイベント トリガー。メイン参考: WeChat アプレットの親子コンポーネントの値渡し通信とイベント トリガー (最も完全で実用的な概要)

おすすめ

転載: blog.csdn.net/sinat_41838682/article/details/132624337