質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Q&A

解決済

2回答

3459閲覧

Vue 子のコンポーネントでV-forがうごかない

Blando

総合スコア8

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

0グッド

0クリップ

投稿2018/04/26 04:06

編集2018/04/26 05:23

Vueを初めて触りました。
初心者です。
子となるコンポーネントに親からデータを渡さず
子だけでデータ
<child></child>の部分に
コンポーネントのDataCompでのデータを
テンプレートを使用して反映させたいと考えていますが。
できません。

どういった方法で対応するとよいのでしょうか?

<form id="test" @submit="checkForm" action="/something" method="post"> <child></child> <p v-if="errors.length"> <b>Please correct the following error(s):</b> <ul> <li v-for="error in errors">{{ error }}</li> </ul> </p> <div class="form-group"> <label for="name">Name</label> <input type="text" name="name" id="name" v-model="name" class="form-control"> </div> <div class="form-group"> <label for="age">Age</label> <input type="number" name="age" id="age" v-model="age" min="0" max="130" class="form-control"> </div> <div class="form-group"> <label for="email">Email</label> <input type="email" name="email" id="email" v-model="email" class="form-control"> </div> <div class="form-group"> <input type="submit" value="Submit" class="btn btn-primary"> </div> </form> var DataComp = { template: '<div v-for="t in todos">{{t.text}}</div>', data: function(){ return { todos: [ { text: "Learn JavaScript", done: false }, { text: "Learn Vue", done: false }, { text: "Play around in JSFiddle", done: true }, { text: "Build something awesome", done: true } ] } } } const app = new Vue({ el:'#test', data:{ errors:[], name:null, email:null }, components: { 'child': DataComp, }, methods:{ checkForm:function(e) { this.errors = []; if(!this.name) this.errors.push("Name required."); if(!this.email) { this.errors.push("Email required."); } else if(!this.validEmail(this.email)) { this.errors.push("Valid email required."); } if(!this.errors.length) return true; e.preventDefault(); }, validEmail:function(email) { var re = /^(([^<>()[]\.,;:\s@"]+(.[^<>()[]\.,;:\s@"]+)*)|(".+"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z\-0-9]+.)+[a-zA-Z]{2,}))$/; return re.test(email); } } })

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

テンプレートのルート要素は1つにする必要があります。
例えば以下のように <div> で囲ってみると動くかと思います。

js

1template: '<div><div v-for="t in todos">{{t.text}}</div></div>',

投稿2018/04/26 05:36

Lulucom

総合スコア1899

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

2箇所ほど気になったところが

  1. templateの下のトップタグは複数禁止...

DataCompのtemplateですが、
v-forで複数になる可能性があるのでエラーになります。

javascript

1template: '<div> <div v-for="t in todos">tt</div> </div>'

とでもして囲む

2.dataは関数で...
親のコンポーネントですが、

javascript

1data:{ 2 errors:[], 3 name:null, 4 email:null 5}

と、オブジェクトを入れてます。

javascript

1data: function () { 2 return { 3 errors:[], 4 name:null, 5 email:null 6 } 7}

で動くかも

投稿2018/04/26 05:34

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問