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

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

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

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

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Q&A

0回答

609閲覧

[todoリスト]投稿済みのテキストを編集後に送信するとエラーが出る

kaji120

総合スコア39

Vue.js

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

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

0グッド

0クリップ

投稿2021/07/17 08:58

編集2021/07/18 03:14

前提・実現したいこと

todoリストを作成しています。編集機能の実装が思うようにいかないので知恵を貸して頂きたいです。
具体的には編集が完了した後に保存ボタンを押すとエラーが出てしまいます。

[実装したい内容]
イメージ説明
①画像の追加したリストの横にあるドットアイコンを押すと編集するという文字が表示されます。

イメージ説明
②クリックすると、「リストを追加しています」の記載が、todo入力箇所に表示される
③保存をクリックすると変更が元のtodoの場所に表示される ←ここが反映されずエラーが出てしまう

以上よろしくお願いいたします。

発生している問題・エラーメッセージ

Cannot read property 'text' of undefined

該当のソースコード

template

1 <template #activator="{ on, attrs }"> 2 <v-btn 3 v-bind="attrs" 4 icon 5 class="mt-6" 6 v-on="on" 7 > 8 <v-icon> 9 mdi-dots-vertical 10 </v-icon> 11 </v-btn> 12 </template> 13 <v-list> 14 <v-list-item 15 link 16 > 17 <v-list-item-title @click="toEdit(todo)"> 18 <v-icon>mdi-pencil</v-icon> 19 編集 20 </v-list-item-title> 21 </v-list-item> 22 </v-list> 23 <v-list> 24 <v-list-item 25 link 26 > 27 <v-list-item-title @click="removeTodo(todo)"> 28 <v-icon>mdi-delete</v-icon> 29 削除 30 </v-list-item-title> 31 </v-list-item> 32 </v-list> 33 </v-menu> 34 </v-row> 35 36 <v-text-field 37 v-model="itemText" 38 filled 39 color="pink lighten-3" 40 auto-grow 41 /> 42 <v-btn 43 :disabled="disabled" 44 @click="addTodo" 45 > 46 保存 47 </v-btn> 48

script

1export default { 2 data () { 3 return { 4 editIndex: false, //編集状態の時はtrueになる 5 itemText: '', 6 selectedTodo: [],//toEditメソッドを実行すると選択されたtodo情報が配列に入れられる 7 items: [ 8 { title: '編集', icon: 'mdi-pencil' }, 9 { title: '削除', icon: 'mdi-delete' } 10 ] 11 } 12 }, 13 14 computed: { 15//todoリストをstoreから呼び出す 16 todos () { 17 return this.$store.state.todos.list 18 }, 19 20 disabled () { 21 return this.itemText.length === 0 22 } 23 }, 24 25 methods: { 26//新規todoリスト追加。editIndexがtrueの場合はtodos/editで編集を反映させる 27 addTodo () { 28 if (this.editIndex === false) { 29 this.$store.commit('todos/add', this.itemText) 30 this.itemText = '' 31 } else { 32 // this.selectedTodo・・・編集対象のリストを取得 33               // this.itemText・・・編集テキストを反映させる 34 this.$store.commit('todos/edit', this.selectedTodo, this.itemText) 35 this.itemText = '' 36 this.editIndex = false 37 } 38 }, 39//編集 40 toEdit (todo) { 41 this.editIndex = true //todo追加ボタンをクリックした時の処理を分ける 42 this.selectedTodo = this.todo  //選択されたリストをselectedTodoで管理 43 this.itemText = todo.text // 編集対象を入力欄に入れる 44 }, 45//削除 46 removeTodo (todo) { 47 this.$store.commit('todos/remove', todo) 48 } 49 } 50} 51</script> 52

store

1export const state = () => ({ 2//todoリストを配列で保存 3 list: [] 4}) 5 6export const mutations = { 7export const state = () => ({ 8 list: [] 9}) 10 11export const mutations = { 12 add (state, text) { 13 state.list.push({ 14 text 15 }) 16 }, 17 remove (state, todo) { 18 state.list.splice(state.list.indexOf(todo), 1) 19 }, 20 21// 引数todo・・・編集対象を取得 22/ /引数tex・・・変更したテキストを 23 edit (state, todo, text) { 24 state.list.splice(state.list.indexOf(todo), 1, text) 25 } 26} 27

試したこと

Cannot read property 'text' of undefined

上記のエラーでstore/editで編集箇所をstore/editが取得できていないのではないかと思い、選択した値をselectedTodoに格納してからstoreに送るようにしましたがエラーは変わりませんでした。

edit

1 state.list.splice(state.list.indexOf(todo), 1, text) 2 }

補足情報(FW/ツールのバージョンなど)

・Nuxt2.15
・Vuetify
・Rails6.1

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問