pushできるようにしよう。
今回は特にFormをコンポーネント化する必要はない。
どのコンポーネントにForm要素を追加するのかをよく考えて実装してみよう。

--- Main.vue
<template>
<div class="main-container">
<list></list>
</div>
</template>
<script>
</script>
<style>
.main-container {
width: 80%;
background: #ddd;
}
.main-container h1 {
padding-top: 50px;
}
</style>
¥Vue¥
--- ListItem.vue
<template>
<div>
<li class="list-item">{{ dream.name }}</li>
</div>
</template>
<script>
</script>
<style>
.list-item {
width: 100%;
padding: 8px;
margin-bottom: 10px;
list-style: none;
border-left: 5px solid #40b983;
border-bottom: 1px solid #40b983;
border-top: 1px solid #40b983;
border-right: 1px solid #40b983;
font-weight: 700;
}
.list-item:hover {
background: #40b983;
opacity: .8;
color: #fff;
}
</style>
¥Vue¥
--- List.vue
<template>
<div>
<div class="main-form-wrapper">
<form v-on:submit.prevent="addDream">
<input type="text" v-model="newDreamName" class="form-input" placeholder="あなたの夢を追加してください">
<input type="submit" class="form-submit">
</form>
</div>
<div class="main-list-wrapper">
<ul class="main-list">
<listitem v-for="dream in dreams" :dream="dream" :key="dream.id"></listitem>
</ul>
</div>
</div>
</template>
<script>
</script>
<style>
.main-list-wrapper, .main-form-wrapper{
background: #fff;
width: 80%;
margin: 2rem auto;
border-radius: 15px;
}
.main-list {
padding: 2rem;
text-align: left;
}
.main-form-wrapper .form-input {
width: 30%;
margin: 30px;
border: 1px solid #ddd;
border-radius: 5px;
height: 40px;
padding-left: 8px;
}
.main-form-wrapper .form-submit {
background: #40b983;
color: #fff;
border: none;
padding: 8px 16px;
border-radius: 5px;
}
</style>
¥Vue¥

解答ソースコード
--- Main.vue
<script>
import List from './List'
export default {
components: {
List
}
}
</script>
¥Vue¥
--- List.vue
<script>
import ListItem from './ListItem'
export default {
name: 'List',
components: {
ListItem
},
data() {
return{
dreams: [
{ id: 1, name: "フルスタックエンジニアになりたい"},
{ id: 2, name: "バックエンドエンジニアになりたい"},
{ id: 3, name: "フロントエンドエンジニアになりたい"},
{ id: 4, name: "データサイエンティストになりたい"},
{ id: 5, name: "スティーブジョブズになりたい"}
],
newDreamName: "",
}
},
methods: {
addDream() {
this.dreams.push({
name: this.newDreamName
});
this.newDreamName = "";
}
}
}
</script>
¥Vue¥
--- ListItem.vue
<script>
export default {
props: {
dream: {
type: Object,
}
}
}
</script>
¥Vue¥


甲賀
なら実務レベルで使えるスキルを
体系的に学ぶことが可能です
Web制作学習は、決して楽ではありませんが
「正しい方向で」「コツコツ」と続ければ、
必ずスキルアップする事が可能です。
甲賀では、挫折せずに学習を継続するための
カリキュラム・サポート体制をご用意しています。
↓↓↓↓
ステップバイステップで
着実にスキルが身につくカリキュラム
-
step 01
初心者でもよく分かる!
Web制作の基礎の基礎1.知っておこうWeb制作に関する基礎知識の話
2.HTMLの書き方や役割を基礎から学ぶマークアップ入門
3.CSSで挫折しない為の基礎学習【超重要プロパティ】
4.基礎を終えたらHTMLコーディングを鍛えよう(デザインから)
5.初心者向けHTMLコーディング完全解説(STEP1総まとめ)
-
step 02
真似して覚えるWeb制作
(デザイン〜プログラミングまで)1.属性ってなに?などなどHTML,CSSの深堀り編
2.デザイナーから直接学ぶ猫ちゃんサイトのデザイン解説
3.鎧模写-YOROIMOSYA【銅の鎧】
4.JavaScriptで学ぶプログラミングの基本のきほん【16項目】
-
step 03
動きをつけたり、効率化!
脱初心者を目指すためのスキルを学ぼう1.jQueryの基本的な使い方から応用まで【プラグイン解説あり】
2.Web制作でCSSを簡単に書くためのSASS入門【小技あり】
3.現場で使うCSS設計の考え方参考サイトを元に解説
4.生のJavaScriptだけで英単語アプリを作ろう(音声読み上げ付き)
-
step 04
ここまでくれば中級者!
ちょこっと応用編のWeb制作1.JavaScriptの屋敷【鳳凰の間】
2.JavaScriptで作るLINE風チャットボット
3.コマンドラインとアプリ操作を同時に学べるGit【15選】
4.EJSを使いコーディング力を中級者まで引き上げる
-
step 05
実務で必須の制作スキル
WordPressについて学ぶ1.鎧模写-YOROIMOSYA【銀の鎧】
2.PHPを基礎から学びたい人向け14項目から学ぶ【入門】
3.PHPで簡易的な掲示板を作ってみよう【コーディングあり】
4.甘えを吹き飛ばす!WordPress開発
5.WordPressで¥400,000の案件を徹底解説!
6.WordPress有料テーマSnow Monkeyの解体書
解説
配列に追加しデータがすぐに消えてしまうから気をつけて欲しい。