【发布时间】:2021-06-13 22:44:58
【问题描述】:
我正在尝试使用 Vue.js 进行 SPA,但不幸的是,我对此几乎一无所知,我按照教程进行操作并开始运行。希望这应该相对简单!
我正在尝试创建一个简单的页面:
- 调用 REST API 并提取一些 JSON
- 结果列表中包含特定字段链接的列表显示在屏幕左侧
(我一直到这里)
现在我希望能够单击其中一个链接并在屏幕右侧查看同一记录的另一个字段的值。
例如,假设我的 JSON 是:
{
"jokes":{
[
"setup":"setup1",
"punchline":"punchline1"
],
[
"setup":"setup2",
"punchline":"punchline2"
],
[
"setup":"setup3",
"punchline":"punchline3"
]
}
}
所以在我的屏幕上我会看到:
setup1
setup2
setup3
所以如果我在 setup1 中单击,我会看到妙语 1,setup2 会显示妙语 2,依此类推。
这是我的代码 - 我基本上是想在moduleinfo div 中显示妙语。我意识到当前的解决方案不起作用。我一直在寻找,但找不到任何类似的例子。任何指针将不胜感激。
<template>
<div class="home">
<div class="module-list">
<input type="text" v-model.trim="search" placeholder="Search"/>
<div>
<ul>
<li class="modules" v-for="value in modulesList" :key="value.id">
<a href="#">{{ value.setup }}</a>
</li>
</ul>
</div>
</div>
<div class="moduleinfo">
<h2>Module info</h2>
<!-- <p>{{ value.punchline }}</p> -->
</div>
</div>
</template>
<script>
import axios from 'axios';
export default {
name: 'Home',
data: function(){
return {
jokes: [],
search : ""
}
},
mounted() {
this.getModules();
},
methods: {
getModules() {
var self = this
const options = {
method: 'GET',
url: 'https://dad-jokes.p.rapidapi.com/joke/search',
params: {term: 'car'},
headers: {
'x-rapidapi-key': '...',
'x-rapidapi-host': 'dad-jokes.p.rapidapi.com'
}
};
axios.request(options)
.then(response => {
self.jokes = response.data;
console.log(response.data);
}).catch(function (error) {
console.error(error);
});
}
},
computed: {
modulesList: function () {
var jokes = this.jokes.body;
var search = this.search;
if (search){
jokes = jokes.filter(function(value){
if(value.setup.toLowerCase().includes(search.toLowerCase())) {
return jokes;
}
})
}
return jokes;
}
},
};
</script>
谢谢!
【问题讨论】:
标签: javascript json rest vue.js