【Vue.js】componentを使ってリスト表示をしたい
<div id="app" class="articleArea"> <!--v-bindには結びつけるtempleteのpropsを指定する--> <datas-joblist v-for="list in joblist" v-bind:todo="list" v-bind:key="list.id"></datas-joblist> </div> <script src="https://cdn.jsdelivr.net/npm/vue"></script> <script> // templeteを使う際のタグ名をつける Vue.component('datas-joblist', { // propsはcomponentのtempleteに名前をつけるもの。new Vueの後とhtmlでtempleteを使用する際にpropsで呼び出せる。 props:['todo'], template: '<article><h2>{{ todo.title }}</h2>{{ todo.text }}</article>' }); var app = new Vue({ el:'#app', data:{ joblist:[ {id:0,title:'タイトル',text:'テキスト テキスト テキスト テキスト テキスト '}, {id:1,title:'タイトル',text:'テキスト テキスト テキスト テキスト テキスト '}, {id:2,title:'タイトル',text:'テキスト テキスト テキスト テキスト テキスト '}, {id:3,title:'タイトル',text:'テキスト テキスト テキスト テキスト テキスト '}, {id:4,title:'タイトル',text:'テキスト テキスト テキスト テキスト テキスト '}, {id:5,title:'タイトル',text:'テキスト テキスト テキスト テキスト テキスト '}, ] } }) </script>
component定義では、以下の部分がミソとなります。
Vue.component('datas-joblist', { props:['todo'], template: '<article><h2>{{ todo.title }}</h2>{{ todo.text }}</article>' });
表示する特定の投稿のタイトルやコンテンツなどのデータをコンポーネントに渡すことができない限り、そのコンポーネントは役に立たないということです。プロパティはここで役立ちます。
コンポーネントの基本 — Vue.js
プロパティはコンポーネントに登録できるカスタム属性です。値がプロパティ属性に渡されると、そのコンポーネントインスタンスのプロパティになります。
コンポーネントの基本 — Vue.js
ということで、componentを設定しても、templeteに設定した{{ ~~~~ }}に対してデータを挿入しなければ、テンプレートとして使用することはできないというわけです。
以下がシンプルでわかりやすい例です。
Vue.component('blog-post', { props: ['title'], template: '<h3>{{ title }}</h3>' })
上記のようにVue.jsでtempleteとprops(プロパティ名)を指定をしておけば、
html側で
<blog-post title="My journey with Vue"></blog-post> <blog-post title="Blogging with Vue"></blog-post> <blog-post title="Why Vue is so fun"></blog-post>
と、タグ内にpropsの値を指定するだけでtempleteを利用することが可能ということです。