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

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

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

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

Q&A

解決済

1回答

773閲覧

【Vue.js】テーブル追加について

countpillow

総合スコア1

Vue.js

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

0グッド

0クリップ

投稿2020/10/12 11:31

編集2020/10/12 15:50

前提・実現したいこと

Vue.js初心者で、公式サイトのガイド[https://jp.vuejs.org/v2/guide/]を見て勉強しています。

以下の条件でテーブルに情報を追加するコードを書こうとしたのですが、
書き方が分からず、苦戦しています。

  • 既に同じ名前の果物がテーブルにある場合は、テーブルに追加できない。

番号 | 果物
1 | りんご
2 | ぶどう
3 | すいか
[ 番号入力フォーム ][ 果物入力フォーム ]「追加ボタン」

上記の果物入力フォームに「りんご」を入力しても、テーブルには追加されないようにしたいです。

作成中のソースコード

Vue.js

1<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 2 <title>test</title> 3 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> 4 5 6 <div id="app"> 7 <input v-model="inputId"> 8 <input v-model="inputName"> 9 <button v-on:click="addTable">Add Table</button> 10 <ul v-for="fruit in fruits"> 11 <td> {{ fruit.id }} </td> 12 <td> {{ fruit.name }} </td> 13 </ul> 14 </div> 15 16 <script> 17 var app = new Vue({ 18 el: '#app', 19 data: { 20 fruits: [ 21 { id:'ID', name:'Name' }, 22 { id:'1', name:'りんご' }, 23 { id:'2', name:'ぶどう' }, 24 { id:'3', name:'すいか' } 25 ] 26 }, 27 methods: { 28 addTable: function () { 29 var flag = true 30 for (let index = 0; index < fruits.length; index++) { 31 if (this.fruits.name[index] == inputName) { 32 flag = false 33 } 34 } 35 if (flag == true){ 36 this.fruits.push({ id:this.inputId, name:this.inputName }) 37 } 38 } 39 } 40 }) 41 42 </script>

試したこと

  • 他の言語のように、For文を組んでみましたが、うまくいきませんでした。

【解決】うまくいったコード

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>test</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <div id="app"> <input v-model="inputId"> <input v-model="inputName"> <button v-on:click="addTable">Add Table</button> <ul v-for="fruit in fruits"> <td> {{ fruit.id }} </td> <td> {{ fruit.name }} </td> </ul> </div> <script> var app = new Vue({ el: '#app', data: { fruits: [ { id:'ID', name:'Name' }, { id:'1', name:'りんご' }, { id:'2', name:'ぶどう' }, { id:'3', name:'すいか' } ] }, methods: { addTable: function () { var flag = true for (let index = 1; index < this.fruits.length; index++) { if (this.fruits[index].name == this.inputName) { flag = false } } if (flag == true){ this.fruits.push({ id:this.inputId, name:this.inputName }) } } } }) </script>

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

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

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

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

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

guest

回答1

0

ベストアンサー

判定のinputNameにthisがついてない

javascript

1if (this.fruits.name[index] == inputName) {

投稿2020/10/12 14:34

sousuke

総合スコア3830

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

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

countpillow

2020/10/12 15:48 編集

ご回答ありがとうございます。 以下のコードで実現したいことができました。 ``` <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>test</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <div id="app"> <input v-model="inputId"> <input v-model="inputName"> <button v-on:click="addTable">Add Table</button> <ul v-for="fruit in fruits"> <td> {{ fruit.id }} </td> <td> {{ fruit.name }} </td> </ul> </div> <script> var app = new Vue({ el: '#app', data: { fruits: [ { id:'ID', name:'Name' }, { id:'1', name:'りんご' }, { id:'2', name:'ぶどう' }, { id:'3', name:'すいか' } ] }, methods: { addTable: function () { var flag = true for (let index = 1; index < this.fruits.length; index++) { if (this.fruits[index].name == this.inputName) { flag = false } } if (flag == true){ this.fruits.push({ id:this.inputId, name:this.inputName }) } } } }) </script> ```
sousuke

2020/10/12 21:46

質問とは関係のないマークアップの話になりますが ulの直下に入るのはliだけです。tdはtableの要素になります。 もう一つVueのdataにまたinputIdとinputNameの属性も持たせたほうがいいと思います。 data: { ,inputId:'' ,inputName:'' ,fruits: [ { id:'ID', name:'Name' }, { id:'1', name:'りんご' }, { id:'2', name:'ぶどう' }, { id:'3', name:'すいか' } ] },
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問