問題
3
Vue
Vueでアプリレイアウトを作ろう! フォーム編
Vueの問題に挑戦しよう!
問題
「Vueでアプリレイアウトを作ろう! フォーム編」
今度はListComponentにFormを追加してリストにデータを
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¥
期待する画面
解答と解説
解説
LINE登録して解答を見る
※ご登録後すぐに解答閲覧用URLが
LINEで届きます
ポインとしては、`v-on:submit.prevent="addDream"`の部分で、ここを普通のv-on:submitだとページ遷移が発生して
配列に追加しデータがすぐに消えてしまうから気をつけて欲しい。