問題3:Vueでアプリレイアウトを作ろう! フォーム編
今度はListComponentにFormを追加してリストにデータを
pushできるようにしよう。
今回は特にFormをコンポーネント化する必要はない。
どのコンポーネントに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¥
期待する画面
解答ソースコード
--- 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¥
完了にする!
活動記録をTweetする
配列に追加しデータがすぐに消えてしまうから気をつけて欲しい。