[解決済み] vue.jsのコンポーネントへのデータの渡し方
質問
vue.jsのコンポーネント間でデータを受け渡す方法を理解するのに苦労しています。 私は何度もドキュメントを読み、多くのvue関連の質問とチュートリアルを見ましたが、私はまだそれを得ることができません。
私の頭を包むために、私は非常に簡単な例を完了する手助けを期待しています。
- 1 つのコンポーネントでユーザーのリストを表示する (完了)
- リンクがクリックされたときに新しいコンポーネントにユーザーデータを送信する (完了) - 下部の更新を参照。
- ユーザーデータを編集し、元のコンポーネントに送り返す(ここまではできていない)
以下は、ステップ2で失敗するフィドルです。 https://jsfiddle.net/retrogradeMT/d1a8hps0/
新しいコンポーネントにデータを渡すためにpropsを使用する必要があることは理解していますが、機能的にどのようにそれを行うのかがわかりません。新しいコンポーネントにデータをバインドするにはどうすればよいのでしょうか?
HTMLです。
<div id="page-content">
<router-view></router-view>
</div>
<template id="userBlock" >
<ul>
<li v-for="user in users">{{user.name}} - <a v-link="{ path: '/new' }"> Show new component</a>
</li>
</ul>
</template>
<template id="newtemp" :name ="{{user.name}}">
<form>
<label>Name: </label><input v-model="name">
<input type="submit" value="Submit">
</form>
</template>
メインコンポーネントのjs。
Vue.component('app-page', {
template: '#userBlock',
data: function() {
return{
users: []
}
},
ready: function () {
this.fetchUsers();
},
methods: {
fetchUsers: function(){
var users = [
{
id: 1,
name: 'tom'
},
{
id: 2,
name: 'brian'
},
{
id: 3,
name: 'sam'
},
];
this.$set('users', users);
}
}
})
2つ目のコンポーネントのJSです。
Vue.component('newtemp', {
template: '#newtemp',
props: 'name',
data: function() {
return {
name: name,
}
},
})
アップデイト
OK、2番目のステップを理解しました。以下はその経過を示す新しいフィドルです。 https://jsfiddle.net/retrogradeMT/9pffnmjp/
Vue-routerを使用しているので、データを新しいコンポーネントに送信するためにpropsを使用するわけではありません。 その代わり、v-linkにparamsを設定し、それを受け入れるためにtransition hookを使用する必要があります。
V-linkの変更 vue-routerのドキュメントにあるnamed routesを参照してください。 :
<a v-link="{ name: 'new', params: { name: user.name }}"> Show new component</a>
次に、コンポーネント上で、ルートオプションにデータを追加します。 トランジションフックを見る :
Vue.component('newtemp', {
template: '#newtemp',
route: {
data: function(transition) {
transition.next({
// saving the id which is passed in url
name: transition.to.params.name
});
}
},
data: function() {
return {
name:name,
}
},
})
どのように解決するのですか?
-------------以下はVue1のみ適用可能です。
データの受け渡しは、複数の方法で行うことができます。使用する種類によって方法が異なります。
新しいコンポーネントを追加している間に、htmlからデータを渡したい場合。それはpropsを使って行います。
<my-component prop-name="value"></my-component>
このプロップの値は、プロップ名
prop-name
を
props
属性に追加します。
何らかの動的または静的なイベントにより、コンポーネントから別のコンポーネントにデータが渡される場合。これは、イベント ディスパッチャとブロードキャスタを使用することで行われます。例えば、このようなコンポーネント構造を持っているとします。
<my-parent>
<my-child-A></my-child-A>
<my-child-B></my-child-B>
</my-parent>
そして、データを
<my-child-A>
から
<my-child-B>
で、次に
<my-child-A>
で、イベントをディスパッチする必要があります。
this.$dispatch('event_name', data);
このイベントは、親チェーンの上まで移動します。そして、どの親からでも
<my-child-B>
への分岐がある場合、データとともにイベントをブロードキャストします。つまり、親では
events:{
'event_name' : function(data){
this.$broadcast('event_name', data);
},
さて、このブロードキャストは子チェーンを下っていきます。そして、イベントを取得したい子プロセスで、この例では
<my-child-B>
で、別のイベントを追加します。
events: {
'event_name' : function(data){
// Your code.
},
},
データを渡す3つ目の方法は、v-linkのパラメータを使用することです。この方法は、コンポーネントチェーンが完全に破壊されたとき、またはURIが変更されたときに使用されます。そして、あなたはすでにそれらを理解していることがわかります。
どのようなデータ通信をしたいのかを決め、適切に選択する。
関連
-
[解決済み] Vue.js - ネストされたデータを適切に監視する方法
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] jQueryでフォームデータをJavaScriptオブジェクトに変換する
-
[解決済み] Vueの「エクスポートデフォルト」と「新しいVue」の比較
-
[解決済み] Vue.js 2.0での兄弟コンポーネント間のコミュニケーション
-
[解決済み] Vue.js - シングルファイルコンポーネントでヘルパー関数をグローバルに利用できるようにする
-
[解決済み] なぜJavaScriptでは!{}[true]がtrueに評価されるのですか?
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] 文字列とラベルのローカライズとグローバリゼーションのベストプラクティス【終了しました
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] なぜ "use strict "はパフォーマンスを10倍向上させるのか?
-
[解決済み] JavaScriptで、ある文字列が別の文字列の中に出現するすべてのインデックスを見つけるにはどうすればよいですか?
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
-
[解決済み] Chromeの拡張機能開発にWebStormを使用するにはどうすればよいですか?
-
[解決済み] Javascript の parseInt() で先頭のゼロを削除する。
-
[解決済み] なぜjavascriptのES6 Promisesはresolve後も実行を継続するのですか?
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?
-
[解決済み] これは純関数ですか?
-
[解決済み] JavaScriptデータフォーマット/プリティプリンタ