目次
v-modelの魔法
你好奇input事件是什么?
组件中的v-model
组件的v-model 生效原则
给组件绑定v-model
入力イベントが何なのか知りたいですか?
コンポーネントの v-model 妥当性原則
v-model をコンポーネントにバインドする
ホームページ ウェブフロントエンド jsチュートリアル コンポーネント内の v-model インスタンスの詳細な説明

コンポーネント内の v-model インスタンスの詳細な説明

Jun 26, 2017 am 10:36 AM
v-model 知る コンポーネント

v-modelの魔法


html

<div id="app">
 <input v-model="poin">
  {{ poin }}</div>
ログイン後にコピー

js

new Vue({
  el:&#39;#app&#39;,
  data:{poin:&#39;zqz&#39;
  }})
ログイン後にコピー

入力した値が変わると、データ内のポイントの値も変わります。

理論的には、データの値が変化するとイベントがトリガーされますが、それが見えなかったのでしょうか?

実際、vue のドキュメントには次のように記載されています:

<input v-model="something">
ログイン後にコピー

は以下の糖衣構文です

<input v-bind:value="something" v-on:input="something = $event.target.value">
ログイン後にコピー

入力するたびに、input イベントがトリガーされ、入力はインライン関数をバインドして、something の値を変更します。 input事件,input绑定了内联函数,从而改变了something的值。

你好奇input事件是什么?

<input><textarea> 元素的值更改时,DOM input 事件会同步触发。(对于 type = checkbox 或 type = radio 的输入元素,当用户单击控件时,输入事件不会触发,因为value属性不会更改。) 此外,当内容更改时,它会在 contenteditable 的编辑器上触发。在这种情况下,事件目标是编辑主机元素。如果有两个或多个具有 contenteditable 的元素为真,“编辑主机”是其父级不可编辑的最近的祖先元素。同样,它也会在 designMode 编辑器的根元素上触发。

具体见:MDN的input事件

组件中的v-model


组件的v-model 生效原则

  • 接受一个value 属性

  • 在有新的value 时触发 input 事件

我们先看一下代码

el-input.vue

<template>

    <div>
      <p>input的封装</p>
      <input type="text"
             ref="input"
             :value="value"
             @input="updateValue($event.target.value)"
             @focus="selectAll"
             >
    </div>

</template>
<script>

export default {
  name: &#39;el-input&#39;,
  props: {
    value: {
      type: Number,
      default: 0
    },
  },
  methods: {
    // 每次都会加一
    updateValue (value) {
      this.$refs.input.value = value + 1;
    },
    selectAll(event) {
      setTimeout(function () {
        event.target.select()
      }, 0)
    }
  }
}

</script>
<style>
</style>
ログイン後にコピー

将这个组件在Tom.vue中使用

<style>
</style>
<template>
    <!-- 在父组件中使用 -->
    <div>
      <v-el-input></v-el-input>
    </div>

</template>
<script>
import vElInput from &#39;./el-input.vue&#39;

export default {
  name: &#39;tom&#39;,
  components: {
    vElInput
  }
}

</script>
ログイン後にコピー

コンポーネント内の v-model インスタンスの詳細な説明

每次使用的时候都会在后面加个1

但是问题来了,我们要如何在Tom.vue中取到这个值呢?

  • 方法一:使用事件 但是感觉有点曲线救国

  • 方法二:使用v-model

这里就体现出了v-model的强大了,因为上面的语法糖,自动的绑定了input事件。所以我们可以利用这个特性去做些事情。

给组件绑定v-model

将Tom.vue的代码修改一下

<template>
    <!-- 在父组件中使用 -->
    <div>
      <v-el-input v-model="eleValue"></v-el-input>
      eleValue的值:{{ this.eleValue }}
    </div>

</template>
<script>
import vElInput from &#39;./el-input.vue&#39;

export default {
  name: &#39;tom&#39;,
  components: {
    vElInput
  },
  data () {
    return {
      eleValue: 666 //设置一个默认值
    }
  }
}

</script>
ログイン後にコピー

初始状态
コンポーネント内の v-model インスタンスの詳細な説明

输入后的状态コンポーネント内の v-model インスタンスの詳細な説明

然后当我们输入的值发生变化的时,我们预想的eleValue依旧没有发生变化,而el-input.vue中的value确发生了变化

也是就是说value发生变化后没有传递(同步)到父组件中,这也就是vue1中的.sync的用处,而在vue2中已经废弃了。

修改el-input.vue代码,增加this.$emit(&#39;input&#39;, value*1)

入力イベントが何なのか知りたいですか?

<input> または <textarea> 要素の値が変更されると、DOM 入力イベントが同期的にトリガーされます。 (type = checkbox または type = radio の input 要素の場合、 value 属性が変化しないため、ユーザーがコントロールをクリックしても input イベントは発生しません。) さらに、コンテンツが変更されると、 contenteditable の editor でイベントが発生します。この場合、イベントのターゲットは編集ホスト要素です。 contenteditable true を持つ要素が 2 つ以上ある場合、「編集ホスト」は、その親が編集不可である最も近い祖先要素です。同様に、designMode エディターのルート要素でも起動されます。
詳細については、次を参照してください: MDN の入力イベント

コンポーネント内の v-model🎜🎜

コンポーネントの v-model 妥当性原則

    < li>🎜value 属性を受け入れます🎜
  • 🎜新しい value があるときに input イベントをトリガーします🎜
🎜まずコードを見てみましょう🎜🎜el-input.vue🎜
...updateValue (value) {  this.$refs.input.value = value + 1;  // 触发组件上绑定的input事件,以实现value同步  this.$emit(&#39;input&#39;, value*1)},...
ログイン後にコピー
🎜このコンポーネントを Tom.vue で使用してください🎜rrreee🎜コンポーネント内の v-model インスタンスの詳細な説明🎜🎜それが使用されるたびに、最後に 1 が追加されます🎜🎜しかし、問題は、この値をどのように取得するかです。 Tom.vue で? 🎜
  • 🎜方法 1: イベントを使用しますが、国を救うには少し曲がりくねった感じがあります🎜
  • 🎜方法 2: v-model を使用します🎜 ul>🎜 上記の糖衣構文が input イベントを自動的にバインドするため、v-model の威力がここに反映されています。したがって、この機能を使用して何かを行うことができます。 🎜

    v-model をコンポーネントにバインドする

    🎜 Tom.vue のコードを変更する🎜rrreee🎜初期状態
    コンポーネント内の v-model インスタンスの詳細な説明🎜🎜入力後のステータスコンポーネント内の v-model インスタンスの詳細な説明🎜🎜その後、入力した値が変化すると、期待していた eleValue は変化せず、el-input.vue の値も変化します🎜🎜 つまり、値は変更後に親コンポーネントに転送 (同期) されません。これが vue1 の .sync の目的ですが、vue2 では廃止されました。 🎜🎜 el-input.vue コードを変更し、this.$emit('input', value*1) を追加します🎜🎜rrreee🎜🎜これにより、値の同期の問題が実現します。 🎜

以上がコンポーネント内の v-model インスタンスの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Windows 10 旧バージョンコンポーネント DirectPlay のインストール方法 Windows 10 旧バージョンコンポーネント DirectPlay のインストール方法 Dec 28, 2023 pm 03:43 PM

win10で一部のゲームをプレイすると、画面がフリーズしたり画面がぼやけるなどの不具合が多くのユーザーに発生しますが、現時点ではダイレクトプレイ機能をオンにすることで問題を解決でき、機能の操作方法も非常に簡単です。 win10 の古いコンポーネントである Directplay をインストールする方法 1. 検索ボックスに「コントロール パネル」と入力して開きます 2. 表示方法として大きなアイコンを選択します 3. 「プログラムと機能」を見つけます 4. 左側をクリックして有効にするか、 Win 機能をオフにする 5. ここで古いバージョンを選択します チェックボックスをオンにするだけです

v-model.number を使用して Vue で入力ボックスのデータ型変換を実装する方法 v-model.number を使用して Vue で入力ボックスのデータ型変換を実装する方法 Jun 11, 2023 am 08:54 AM

Vue では、v-model は双方向バインディングの実装に使用される重要な命令であり、ユーザー入力を Vue のデータ属性に簡単に同期できるようにします。ただし、ユーザーが入力した文字列型を数値型に変換するなど、データを変換する必要がある場合には、v-model の .number 修飾子を使用する必要があります。 v-model.number の基本的な使い方 v-model.number は v-model を修正したものです

Vueを使用してカレンダーコンポーネントを実装するにはどうすればよいですか? Vueを使用してカレンダーコンポーネントを実装するにはどうすればよいですか? Jun 25, 2023 pm 01:28 PM

Vue は非常に人気のあるフロントエンド フレームワークであり、コンポーネント化、データ バインディング、イベント処理など、開発者が効率的で柔軟で保守が容易な Web アプリケーションを構築するのに役立つ多くのツールと機能を提供します。この記事では、Vueを使ってカレンダーコンポーネントを実装する方法を紹介します。 1. 要件の分析 まず、このカレンダー コンポーネントの要件を分析する必要があります。基本的なカレンダーには次の機能が必要です: 当月のカレンダー ページの表示、前月または翌月への切り替えのサポート、特定の日のクリックのサポート、

VUE3 開発の基本: extend を使用してコンポーネントを継承する VUE3 開発の基本: extend を使用してコンポーネントを継承する Jun 16, 2023 am 08:58 AM

Vue は現在最も人気のあるフロントエンド フレームワークの 1 つであり、VUE3 は Vue フレームワークの最新バージョンであり、VUE2 と比較してパフォーマンスが高く、開発エクスペリエンスが優れているため、多くの開発者の最初の選択肢となっています。 VUE3 では extends を使ってコンポーネントを継承することが非常に実用的な開発手法となっておりますので、この記事では extends を使ってコンポーネントを継承する方法を紹介します。エクステンドとは何ですか? Vue では、extends は非常に実用的な属性であり、子コンポーネントが親から継承するために使用できます。

Angular コンポーネントとその表示プロパティ: 非ブロックのデフォルト値について Angular コンポーネントとその表示プロパティ: 非ブロックのデフォルト値について Mar 15, 2024 pm 04:51 PM

Angular フレームワークのコンポーネントのデフォルトの表示動作は、ブロックレベルの要素ではありません。この設計の選択により、コンポーネント スタイルのカプセル化が促進され、開発者が各コンポーネントの表示方法を意識的に定義することが促進されます。 CSS プロパティの表示を明示的に設定することで、Angular コンポーネントの表示を完全に制御して、目的のレイアウトと応答性を実現できます。

古いバージョンのwin10コンポーネントの設定を開く方法 古いバージョンのwin10コンポーネントの設定を開く方法 Dec 22, 2023 am 08:45 AM

Win10 の古いバージョンのコンポーネントは、デフォルトで閉じられていることが多いため、ユーザー自身が設定で有効にする必要があります。まず、設定を入力する必要があります。操作は非常に簡単です。以下の手順に従ってください。Win10 の古いバージョンはどこにありますか?バージョン コンポーネント? 開く 1. [スタート] をクリックし、[Win システム] をクリックします 2. クリックしてコントロール パネルに入ります 3. 次に、下のプログラムをクリックします 4. [Win 機能を有効または無効にする] をクリックします 5. ここで必要なものを選択できます開く

Vue エラー: v-model は双方向データ バインディングに正しく使用できません。解決方法は? Vue エラー: v-model は双方向データ バインディングに正しく使用できません。解決方法は? Aug 19, 2023 pm 08:46 PM

Vue エラー: v-model は双方向データ バインディングに正しく使用できません。解決方法は?はじめに: 双方向データ バインディングは、Vue で開発する場合に非常に一般的で強力な機能です。ただし、場合によっては問題が発生することがあります。つまり、双方向データ バインディングに v-model を使用しようとすると、エラーが発生します。この記事では、この問題の原因と解決策について説明し、問題の解決方法を示すコード例を示します。問題の説明: Vue で v-model を使用しようとすると

Vue コンポーネントの実践: ページング コンポーネントの開発 Vue コンポーネントの実践: ページング コンポーネントの開発 Nov 24, 2023 am 08:56 AM

Vue コンポーネントの実践: ページング コンポーネント開発の概要 Web アプリケーションでは、ページング機能は不可欠なコンポーネントです。優れたページング コンポーネントは、プレゼンテーションがシンプルかつ明確で、機能が豊富で、統合と使用が簡単である必要があります。この記事では、Vue.js フレームワークを使用して高度にカスタマイズ可能なページング コンポーネントを開発する方法を紹介します。 Vueコンポーネントを使った開発方法をコード例を通して詳しく解説します。テクノロジースタック Vue.js2.xJavaScript (ES6) HTML5 および CSS3 開発環境

See all articles