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

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

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

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

Q&A

解決済

2回答

424閲覧

propがうまくいかない

1042limit

総合スコア29

Vue.js

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

0グッド

0クリップ

投稿2018/09/22 13:47

お世話になります。Vue.jsとaxiosを用いてjsonファイルからリストを取り出し、フィルタリングしてリストを表示するコンポーネントを作成しています。

HTML

1<sample val="a"></sample>

このように書いてvalの値でフィルタリングをしたいと思っております。

javascript

1<template> 2<div> 3 <div> 4 <ul> 5 <li v-for="list in lists" v-bind:key="list.id"> 6 <a :href="`/word/`+list.ehead+`/`+list.eword+`.html`">{{list.eword}}({{list.jword}})</a> 7 </li> 8 </ul> 9 </div> 10</div> 11</div> 12</template> 13<script> 14import axios from 'axios' 15export default { 16props: ["val"], 17 data() { 18 return { 19 fulllists: [], 20 } 21 }, 22 created: function() { 23 axios.get('/list.json').then(function(response) { 24 this.fulllists = response.data 25 }.bind(this)).catch(function(e) { 26 console.error(e) 27 }) 28}, 29computed: { 30 scope: function(){ 31 return this.val 32 }, 33 lists: function() { 34 return this.fulllists.filter(function(i) { 35 console.log(i) 36 return i.ehead === 'scope' 37 }) 38 } 39}, 40} 41 42</script>

json

1[ 2 { 3 "id": 1, 4 "eword": "abalone", 5 "jword": "アワビ", 6 "ehead": "a", 7 "jhead": "あ", 8 "ecat": "food", 9 "jcat": "食物" 10 }, 11 { 12 "id": 1013, 13 "eword": "dystopia", 14 "jword": "ディスコピア", 15 "ehead": "d", 16 "jhead": "て", 17 "ecat": "place", 18 "jcat": "場所" 19 } 20]

vueのツールで確認するとval="a"となっているときはscopeがaになっているのですが表示されません。
ご教授のほどよろしくお願い申し上げます。

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

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

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

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

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

guest

回答2

0

こんな感じでは動きませんか?

javascript

1 lists: function() { 2 // filterの中のFunctionからvueインスタンスを示すthisを使いたいので 3 const self = this; 4 return this.fulllists.filter(function(i) { 5 console.log(i) 6 // thisではなくselfでvueインスタンスのscopeにアクセスする 7 return i.ehead === self.scope 8 }) 9 }

投稿2018/09/22 15:49

denzow

総合スコア640

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

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

0

ベストアンサー

こうすればいかがですか?

return i.ehead === 'scope'

return i.ehead == this.scope

<追記>
画面起動して最初のfilterが動く際に、算出プロパティのscopeが初期化されていないため、undefinedになっているようです。

以下のように、propvalを直接参照しても、動くと思います。(こちらでは動きました)

javascript

1 lists: function() { 2 return this.fulllists.filter(i => { 3 console.log(i) 4 return i.ehead == this.val 5 }) 6 }

投稿2018/09/22 14:19

編集2018/09/22 15:52
w2-yamaguchi

総合スコア167

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

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

1042limit

2018/09/22 14:35

お返事ありがとうございます。 Error in render: "TypeError: Cannot read property 'scope' of undefined" と変更すると出てしまいます。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問