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コマンドの基本的な使い方の詳細な説明

推薦する

Linux QT Kit が見つからない、バージョンが空の問題の解決策

現在このような問題が発生しています 私の状況は、QT が動かなくなってしまったため、仮想マシンを再起...

TinyEditorはシンプルで使いやすいHTML WYSIWYGエディタです

数日前、国産の XHTML エディタを紹介しました。今日は、有名な海外の Web デザイン ブログl...

MySQLへの外部ネットワークアクセスを許可し、MySQLアカウントのパスワードを変更する方法

mysqlのrootアカウント、普段はlocalhostか127.0.0.1で接続しています。会社の...

HTML で入力テキスト入力キャッシュのクリアを禁止する 2 つの方法

ほとんどのブラウザはデフォルトで入力値をキャッシュし、ctl+F5 を使用して強制的に更新することに...

MySQL 正規表現 (regexp と rlike) の検索機能の例分析

この記事では、例を使用して MySQL 正規表現 (regexp および rlike) の検索機能を...

SQL 挿入文の書き方の説明

方法 1: INSERT INTO t1(field1,field2) VALUE(v001,v00...

MySQL ストレステストツール Mysqlslap の使用

1. MySQL独自のストレステストツールMysqlslap mysqlslap は、mysql に...

CSSの絶対と相対について

冒頭にこう書かれています:アブソリュートは言った。「親戚よ、私はあなたを私の人生で見たくない!」なぜ...

MySQL カウントを向上させる方法のまとめ

多くのプログラマーは MySQL に精通していると思います。多くの人が count の使い方と、最適...

Vueでデータ例を定義する方法

序文開発プロセスにおいて、変数の定義は非常に頻繁かつ基本的なタスクです。変数の使用シナリオと範囲に応...

Maven+Tomcat 基本イメージを構築する Docker の実装

序文Javaプログラミングでは、ほとんどのアプリケーションはMavenに基づいて構築されており、配信...

Vue での weixin-js-sdk の一般的な使用方法の詳細な説明

リンク: https://qydev.weixin.qq.com/wiki/index.php?ti...

MySQL 日付処理関数の例の分析

この記事は主にMySQLの日付処理関数のサンプル分析を紹介します。この記事ではサンプルコードを詳細に...

Linux で iostat コマンドを使用するチュートリアル

序文運用・保守を行う人がスキルを持っていなければ、サーバーを操作するのに恥ずかしさを感じてしまうと言...

CSS3はウェブサイトの製品表示効果図を実現します

この記事では、CSS3 を使用した Web サイトの商品表示の効果を紹介し、皆さんと共有します。詳細...