[解決済み】vuejs 子コンポーネントから親データを更新する
質問
vuejs (2.0)で遊び始めています。
私はその中に1つのコンポーネントを持つ簡単なページを作りました。
このページには、データを持つ1つのVueインスタンスがあります。
そのページで、htmlにコンポーネントを登録し、追加しました。
このコンポーネントには、1つの
input[type=text]
. その値を親(メインのVueインスタンス)に反映させたいのです。
コンポーネントの親データを正しく更新するには? 親からバインドされたpropを渡すのは良くなく、コンソールにいくつかの警告を投げます。ドキュメントに何か書いてあるのですが、うまくいきません。
解決方法は?
Vue 2.0では、よりイベントドリブンなアーキテクチャを使用するために、双方向バインディングは非推奨となっています。一般に、子プロセスは、そのプロップを変更すべきではありません。むしろ、以下のようにすべきです。
$emit
イベントを作成し、親がそのイベントに応答するようにします。
あなたの具体的なケースでは、カスタムコンポーネントに
v-model
. これは、双方向バインディングに近いものを可能にする特別な構文ですが、実際には、前述のイベント駆動型アーキテクチャの略記法です。詳しくはこちら ->
https://vuejs.org/v2/guide/components.html#Form-Input-Components-using-Custom-Events
.
以下は簡単な例です。
Vue.component('child', {
template: '#child',
//The child has a prop named 'value'. v-model will automatically bind to this prop
props: ['value'],
methods: {
updateValue: function (value) {
this.$emit('input', value);
}
}
});
new Vue({
el: '#app',
data: {
parentValue: 'hello'
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.13/vue.js"></script>
<div id="app">
<p>Parent value: {{parentValue}}</p>
<child v-model="parentValue"></child>
</div>
<template id="child">
<input type="text" v-bind:value="value" v-on:input="updateValue($event.target.value)">
</template>
ドキュメントには次のように書かれています。
<custom-input v-bind:value="something" v-on:input="something = arguments[0]"></custom-input>
と同じです。
<custom-input v-model="something"></custom-input>
子プロップがvalueという名前である必要があるのはそういうわけで、子プロップが$emitという名前のイベントを出す必要があるのはそういうわけです。
input
.
関連
-
[解決済み] jQueryで、ユーザーがそのフィールドを編集している間、テキストフィールドの最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み] React with ES7: Uncaught TypeError: Cannot read property 'state' of undefined [duplicate] (未定義のプロパティ'state'を読み込むことはできません。
-
[解決済み】React.jsの配列の子要素のユニークキーを理解する
-
[解決済み】未定義のプロパティ 'forEach' を読み取ることができない
-
[解決済み】JavaScriptで関数が存在するかどうかを確認する方法は?
-
[解決済み] [Solved] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングする
-
[解決済み] 親メソッドから子メソッドを呼び出す
-
[解決済み】Vue.jsコンポーネントのメソッドをコンポーネントの外から呼び出す
-
[解決済み】Vue 2 - プロップの変異 vue-warn
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み】JavaScriptで':'(コロン)は何をするのか?
-
[解決済み】jquery $.ajaxオブジェクトのresponseJSONプロパティを取得する方法 [重複]。
-
[解決済み】XMLHttpRequestモジュールが定義されていない/見つからない
-
[解決済み】JavaScript "Uncaught TypeError: object is not a function" 連想性の質問
-
[解決済み】SyntaxError: ChromeのJavascriptコンソールでUnexpected Identifierが発生する。
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】Jestが予期しないトークンに遭遇した
-
[解決済み】TypeError: AngularJSで未定義のプロパティ'get'を読み取れない
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー