どうやっても解決しなかったので、質問します。
自分がずっと開発に用いているVue CLIの環境ですが、どうやってもthis.$setとthis.$deleteというオブジェクト操作メソッドが使用できずに困っています。何が原因なのかご教授いただけたらと思います。
問題点
以下のエラーが出て、this.$setとthis.$deleteが使用できないために、オブジェクトの操作ができない。
runtime-core.esm-bundler.js?5c40:217 Uncaught TypeError: this.$set is not a function
なお、this.$emitや$event.target.checkedなどは普通に機能しています。
ソース
Test.vue (親コンポーネント)
Test.vue
1<template> 2 <div v-for="(chkval,idx) in checkboxes"> 3 <sub-tab :chkval="chkval" @fromc="receive" :key="idx" ></sub-tab> 4 </div> 5 <ul v-for="(result,idx) in results"> 6 <li key="result.id">{{result.name}}</li> 7 </ul> 8</template> 9<script> 10import Vue from 'vue' 11import Sub from './Sub.vue' 12export default{ 13 name: 'Test', 14 components: { 15 'sub-tab': Sub, 16 }, 17 data(){ 18 return{ 19 checkboxes:[ 20 {id:1,name:'sapporo'}, 21 {id:2,name:'asahikawa'}, 22 {id:3,name:'hakodate'}, 23 ], 24 results: [], 25 } 26 }, 27 methods:{ 28 receive: function(chkval){ 29 console.log(this.$set) 30 console.log(this) 31 let vm = this 32 let results = this.results 33 //console.log(chkval) 34 let len = this.checkboxes.length 35 console.log(len) 36 /*for(var i = 0; i< len ; i++ ){ 37 this.$set(results,i,this.checkboxes[i]) 38 }*/ 39 console.log(results) 40 this.checkboxes.map((item,idx)=>{ 41 var vm = this 42 43 let ary = { 44 'id': item.id, 45 'name': item.name, 46 } 47 if(chkval.checked === true && chkval.id === item.id){ 48 this.$set('results',ary) //未定義関数エラーが起きる 49 }else{ 50 this.$delete(results,idx) //未定義関数エラーが起きる 51 } 52 }) 53 //console.log("*") 54 console.log(results) 55 this.results = results 56 } 57 }, 58} 59</script>
Sub.vue(子コンポーネント)
vue
1<template> 2 <label> 3 {{chkval.name}}<input type="checkbox" :value="chkval.id" @input="inputVal(chkval.id,$event.target.checked)" > 4 </label> 5</template> 6<script> 7export default{ 8 props:[ 9 'chkval', 10 ], 11 data(){ 12 return{ 13 dummy: [] 14 } 15 }, 16 methods:{ 17 inputVal(id,flg){ 18 let vals = { 19 "id": id, 20 "checked": flg, 21 } 22 //this.$set(this.dummy,0,vals) 23 this.$emit('fromc',vals) 24 } 25 }, 26} 27</script>
試したこと
色々試したのですが、どれも解決には至っていません。
他の記述方法を試した
this.$setが使用できないので、マニュアルにしたがってVue.set
、vm.$set
も試してみたのですが、同様に関数ではないというエラーが出ます。
メソッド内でthisを代入してみた
以下のStackOverflowの議題の回答どおり、thisを代入してみたのですが、結局同じエラーとなりました。
TypeError: this.$set is not a function
import定義を付与してみた
main.jsとApp.vueとTest.vueそれぞれに
import Vue from 'vue
を記述してみたのですが、結局意味がありませんでした。また、メソッド内でconsole.log(Vue)とするとundefinedとなっていました。
mapをやめて、forでループしてみた
関数の内側なのが問題なのかと思い、forでも試してみたのですが、結局どこに置いてもエラーとなりました。また、子コンポーネントでもテストしたら、やはり認識エラーとなりました。
methods以外でテストしてみた
メソッドが問題なのではないかと考え、算出プロパティやライフサイクルフックでも試してみたのですが、やはり同じエラーとなります。
自宅の環境でテストしてみた
あれから自宅に戻り、自宅のVue操作環境でテストしたところ、普通に
js
1console.log(Vue) 2console.log(this.$set(array_test,0,"aaaaa")
が反応していました。なので、
js
1import Vue from 'vue'
が反応していない状態のようですが、原因は何なんでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。