Vueの7つの値転送メソッドの詳細な説明

Vueの7つの値転送メソッドの詳細な説明

1. 父から息子へ

子コンポーネントにpropsフィールドを定義し、その型は配列です (フィールド値の型を制限する必要がある場合は、オブジェクトの形式で定義することもできます)。以下の例に示すように、親コンポーネントは子コンポーネントHelloWorldをマウントし、コンポーネント タグのtitle値を割り当て、子コンポーネントHelloWorld titleという値を含むpropsを定義して、子コンポーネントが親コンポーネントの値を使用できるようにします。

親コンポーネント

<テンプレート>
 <div>
 <HelloWorld:title="メッセージ" />
 </div>
</テンプレート>

<スクリプト>
「../components/HelloWorld.vue」からHelloWorldをインポートします。

エクスポートデフォルト{
 名前: "ホーム",
 データ() {
 戻る {
  メッセージ: 「音楽を検索」、
 };
 },
 コンポーネント:
 こんにちは世界、
 },
};
</スクリプト>

サブコンポーネント

<テンプレート>
 <div class="hello">
 <h1>{{ タイトル }}</h1>
 </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
 名前: "HelloWorld",
 プロパティ:["タイトル"],
 データ() {
 戻る {};
 },
};
</スクリプト>

2. 息子から父へ

子から親に値を渡すには、子コンポーネントでイベントをトリガーする必要があります。イベントでは、 $emit('父組件的方法名', '傳遞的值')を呼び出し、カスタム イベントを通じて親コンポーネントで渡された値を受け取ります。

サブコンポーネント

<テンプレート>
 <div class="hello">
 <h1 @click="add">{{ タイトル }}</h1>
 </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
 名前: "HelloWorld",
 プロパティ: ["タイトル"],
 データ() {
 戻る {
  年齢:18
 };
 },
 メソッド: {
 追加(){
  this.$emit("childEvent", this.age);
 }
 },
};
</スクリプト>

親コンポーネント

<テンプレート>
 <div>
 <HelloWorld @childEvent="親イベント" :title="メッセージ" />
 </div>
</テンプレート>

<スクリプト>
「../components/HelloWorld.vue」からHelloWorldをインポートします。

エクスポートデフォルト{
 名前: "ホーム",
 データ() {
 戻る {
  メッセージ: 「音楽を検索」、
 };
 },

 メソッド: {
 親イベント(e) {
  コンソールログ(e);
 },
 },
 コンポーネント:
 こんにちは世界、
 },
};
</スクリプト>

3. ブラザーコンポーネント値の転送

1. まずbus.jsファイルを作成し、データを送信するための中間層として機能するVueインスタンスをbus.js内にnew

'vue' から Vue をインポートします。
デフォルトの新しい Vue をエクスポートします。

2. コンポーネント A にbus.jsを導入し、 bus.$emit('事件名','參數')を通じてパラメータを渡します。

<テンプレート>
 <div class="hello">
 <h1 @click="add">{{ タイトル }}</h1>
 </div>
</テンプレート>

<スクリプト>
「../publicFn/bus.js」からバスをインポートします。

エクスポートデフォルト{
 名前: "HelloWorld",
 プロパティ: ["タイトル"],
 データ() {
 戻る {
  年齢:18
 };
 },
 メソッド: {
 追加(){
  バス。$emit("childEvent", this.age);
 }
 },
};
</スクリプト>

3. $on('事件名', function(){})使用して、コンポーネントBのmountedサイクルで受信します。

<テンプレート>
 <div id='スワイパー'>
 <button>私はボタンです</button>
 </div>
</テンプレート>

<スクリプト>

「../publicFn/bus.js」からバスをインポートします。

エクスポートデフォルト{
 名前:'スワイパー',
 データ (){
 戻る {

 }
 },
 マウントされた(){
 バス.$on("childEvent", (e) => {
  コンソール.log(e)
 })
 }
}
</スクリプト>

4. 親コンポーネントは子コンポーネントのデータとメソッドを使用する

1.サブコンポーネントタグにref属性を記述する

2. 親コンポーネントはthis.$refs.id.方法名またはthis.$refs.id.屬性名を通じて子コンポーネントにアクセスできます。

親コンポーネント

<テンプレート>
 <div>
 <HelloWorld:title="メッセージ" ref="こんにちは" />
 <button @click="parentEvent">私は父親です</button>
 </div>
</テンプレート>

<スクリプト>
「../components/HelloWorld.vue」からHelloWorldをインポートします。

エクスポートデフォルト{
 名前: "ホーム",
 データ() {
 戻る {
  メッセージ: 「音楽を検索」、
 };
 },

 メソッド: {
 親イベント() {
  this.$refs.hello.add();
  console.log(this.$refs.hello.age);
 },
 },
 コンポーネント:
 こんにちは世界
 },
};
</スクリプト>

サブコンポーネント

<テンプレート>
 <div class="hello">
 <h1>{{ タイトル }}</h1>
 </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
 名前: "HelloWorld",
 プロパティ: ["タイトル"],
 データ() {
 戻る {
  年齢:18
 };
 },
 メソッド: {
 追加(){
  console.log("私は子コンポーネントです");
 }
 },
};
</スクリプト>

5. 子コンポーネントは親コンポーネントのデータとメソッドを使用する

子コンポーネントでは、 $parentを使用して親コンポーネントのデータとメソッドにアクセスできます。 複数のネストがある場合は、 $parentの複数のレイヤーを使用することもできます。

親コンポーネント

<テンプレート>
 <div>
 <HelloWorld:title="メッセージ" ref="こんにちは" />
 </div>
</テンプレート>

<スクリプト>
「../components/HelloWorld.vue」からHelloWorldをインポートします。

エクスポートデフォルト{
 名前: "ホーム",
 データ() {
 戻る {
  メッセージ: 「音楽を検索」、
 };
 },

 メソッド: {
 親イベント() {
  console.log("私は親コンポーネントのメソッドです");
 },
 },
 コンポーネント:
 こんにちは世界
 },
};
</スクリプト>

サブコンポーネント

<テンプレート>
 <div class="hello">
 <h1 @click="add">{{ タイトル }}</h1>
 </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
 名前: "HelloWorld",
 プロパティ: ["タイトル"],
 データ() {
 戻る {
  年齢:18
 };
 },
 メソッド: {
 追加(){
  console.log(this.$parent.msg)
  this.$parent.parentEvent();
 }
 },
};
</スクリプト>

6. Vuex 値転送

VuexVue.jsアプリケーション専用に開発された状態管理パターンです。集中型ストレージを使用してアプリケーションのすべてのコンポーネントのステータスを管理し、対応するルールを使用して、ステータスが予測可能な方法で変更されるようにします。一般的に、小規模なプロジェクトでは必要ありません。

6.1、ストアを定義する

「vue」からVueをインポートします。
「vuex」からVuexをインポートします。

Vue.js で Vuex をビルドします。

デフォルトの新しいVuex.Storeをエクスポートします({
 州: {
 学校:「清華大学」、
 a:「いいですね」
 },
 ゲッター: {
 returnVal(状態) {
  state.school + state.a を返します。
 },
 },
 突然変異:
 学校の状態を変更します(値) {
  状態.学校 = val;
  console.log('変更が成功しました');
 },
 },
 アクション: {},
 モジュール: {}
});

6.2、マウント

'vue' から Vue をインポートします。
'./App.vue' からアプリをインポートします。
「./router」からルーターをインポートします。
「./store」からストアをインポートします。
「element-ui」からElementUIをインポートします。
「element-ui/lib/theme-chalk/index.css」をインポートします。
「./publicFn/publicFn」からpublicFnをインポートします。

Vue.config.productionTip = false


定数 url = process.env.VUE_APP_URL;
Vue.prototype.$url = url;
Vue.prototype.$publicFn = publicFn;

Vue.js の ElementUI 要素をオーバーライドします。

新しいVue({
 ルーター、
 店、
 レンダリング: h => h(App),
}).$mount('#app')

6.3、使用

<テンプレート>
 <div class="hello">
 <h1 @click="add">{{ タイトル }}</h1>
 </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
 名前: "HelloWorld",
 プロパティ: ["タイトル"],
 データ() {
 戻る {
  年齢:18
 };
 },
 メソッド: {
 追加(){
  console.log(this.$store.state.school);//値を取得//this.$store.commit('changeSchool', 'Peking University');//値を変更// console.log(this.$store.getters.returnVal)//フィルタリングされた値を取得}
 },
};
</スクリプト>

7. ルーティング値

7.1 クエリを通じて値を渡す

注: この方法では、ページの更新パラメータは失われず、アドレスバーの後にパラメータが表示さhttp://localhost:9000/#/conter?id=10086&name=%E9%B9%8F%E5%A4%9A%E5%A4%9A

ページA

<テンプレート>
 <div>
 <HelloWorld:title="メッセージ" ref="こんにちは" />
 <button @click="parentEvent">ジャンプ</button>
 </div>
</テンプレート>

<スクリプト>
「../components/HelloWorld.vue」からHelloWorldをインポートします。

エクスポートデフォルト{
 名前: "ホーム",
 データ() {
 戻る {
  メッセージ: 「音楽を検索」、
 };
 },

 メソッド: {
 親イベント() {
  this.$router.push({
  パス:"/conter",
  名前:'conter',
  クエリ:{
   id:10086,
   名前:「彭多多」
  }
  })
 },
 },
 コンポーネント:
 こんにちは世界
 },
};
</スクリプト>

ページB

<テンプレート>
 <div id='conter'>

 </div>
</テンプレート>

<スクリプト>

エクスポートデフォルト{
 名前:'conter',
 データ (){
 戻る {

 }
 },
 作成された(){
 console.log(this.$route.query.id、this.$route.query.name);
 },
}
</スクリプト>

7.2 パラメータ経由で値を渡す

注意: この方法でページを更新すると、パラメータは失われますが、 sessionStorageで受信して保存することができます。

Aページ

<テンプレート>
 <div>
 <HelloWorld:title="メッセージ" ref="こんにちは" />
 <button @click="parentEvent">ジャンプ</button>
 </div>
</テンプレート>

<スクリプト>
「../components/HelloWorld.vue」からHelloWorldをインポートします。

エクスポートデフォルト{
 名前: "ホーム",
 データ() {
 戻る {
  メッセージ: 「音楽を検索」、
 };
 },

 メソッド: {
 親イベント() {
  this.$router.push({
  パス:"/conter",
  名前:"カウンター",
  パラメータ:{
   id:10086,
   名前:「彭多多」
  }
  })
 },
 },
 コンポーネント:
 こんにちは世界
 },
};
</スクリプト>

ページB

<テンプレート>
 <div id='conter'>

 </div>
</テンプレート>

<スクリプト>

エクスポートデフォルト{
 名前:'conter',
 データ (){
 戻る {

 }
 },
 作成された(){
 console.log(this.$route.params.id、this.$route.params.name);
 },
}
</スクリプト>

これで、Vue の 7 つの値転送メソッドに関するこの記事は終了です。Vue の値転送メソッドの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue3 の父子値転送に関する簡単な説明
  • Vue の親子コンポーネントの値転送と一方向データフローの問題の詳細な説明
  • Vue 親子コンポーネントの相互値の転送と呼び出し
  • Vue の親子コンポーネントの値転送の落とし穴
  • vueの子コンポーネントと親コンポーネント間で値を渡す例
  • Vue 父子価値移転、兄弟価値移転、子父価値移転の詳細な説明

<<:  MySQL ステートメントを使用して、さまざまな整数が占めるバイト数とその最大値と最小値を調べる例

>>:  SSHのssh-keygenコマンドの基本的な使い方の詳細な説明

推薦する

JSX を使用してマークアップ コンポーネント スタイルの開発を作成する例 (フロントエンドのコンポーネント化)

目次JSX環境の構築NPMを初期化するwebpackをインストールするBabelをインストールするw...

Vueプロジェクトのパッケージ化の詳細な説明

目次1. 関連構成ケース1(使用ツールはvue-cil)ケース2(使用するツールはwebpack) ...

@Font-face の基本的な使い方と、すべてのブラウザと互換性を持たせる方法

@Font-face 基本紹介: @font-face は、Web ページにカスタム フォントを表示...

mysql8.0.11データディレクトリ移行の実装

mysql のデフォルトのストレージ ディレクトリは/var/lib/mysql/です。以下は、デフ...

MySQL 8.0.23 メジャーアップデート (新機能)

著者: Guan Changlong は、Aikesheng の配送サービス部門の DBA です。主...

mysql 5.6.21 のインストールと設定の詳細な手順

1. 概要MySQL バージョン: 5.6.21ダウンロードアドレス: https://dev.my...

Mac での MySql の詳細なインストールと構成

1.ダウンロードしてインストールする公式ウェブサイトからコミュニティ エディションの dmg インス...

VMware 仮想マシンでの Centos8 ブリッジの静的 IP 設定方法

1. ネットワーク接続方法がブリッジされていることを確認する物理ネットワーク接続ステータスのコピーを...

Centos7 への MySQL8 のインストールチュートリアル

MySQL 8 の新機能: MySQL をバージョン 5.x から 8.x に直接アップグレードする...

after疑似要素を使用して中空の三角矢印とXアイコンを実装する例

フロントエンドのデザイン案では、「X」や「>」の形をした閉じるボタンや、他の 3 方向の白抜き...

行の高さと垂直方向の配置に関する包括的な理解

前の単語line-height、font-size、vertical-align は、インライン要素...

テキスト ファイルの並べ替えに役立つ Awk コマンドラインまたはスクリプト (推奨)

Awk は、ソートを含む他の一般的なユーティリティによって実行できるいくつかのタスクを実行できる強...

タブバーの切り替え効果を実現するJavaScript

タブバー: 異なるタブをクリックすると異なるコンテンツが表示され、クリックしたタブのスタイルが変更さ...

Vue Router の 10 の高度なヒントのまとめ

序文Vue Router は、Vue.js の公式ルーティング マネージャーです。 Vue.js の...

Tomcatが親の委任メカニズムを破壊する方法についての簡単な説明

目次JVM クラスローダーTomcat クラスローダークラスを検索ロードクラスクラスをロードしようと...