【发布时间】:2019-02-05 06:28:04
【问题描述】:
我是 Vue js 的新手,很抱歉这个愚蠢的问题。我正在使用 v-data-table 循环遍历数组。我需要一个方法的返回值不改变,但是当方法运行时它会改变每一行。
我尝试了一个计算值,但由于某种原因你不能将变量传递给计算字段?
<template>
<div>
<v-data-table
:items="responseData"
class="elevation-1"
>
<template slot="items" slot-scope="props">
<td :key="props.item.tmdbId" class="text-xs-right">
This: {{checkMovieExists(props.item.tmdbId)}}
</td>
</template>
</v-data-table>
</div>
</template>
<script>
import axios from "axios";
export default {
data() {
return {
allMovies: []
};
},
mounted() {
axios.get("XXXX")
.then(response => (this.allMovies = response.data))
},
methods: {
checkMovieExists(strMovieTmdbId){
this.allMovies.forEach(movie => {
if (movie.tmdbId == strMovieTmdbId) {
return "Exists"
}
});
}
}
}
</script>
【问题讨论】:
-
“我需要一个方法的返回值不改变” 你这是什么意思?您是否希望该方法只为每个项目触发一次,然后在项目的数据发生变化时不再触发?
-
checkMovieExists函数本质上返回undefined-forEach的结果。如果您想查找项目,请改用Array.find。 -
另外,您将
responseData绑定到数据表组件的items属性,但您没有在任何地方定义responseData... -
抱歉 ResponseData 实际上来自已删除的代码的另一部分。这基本上会根据搜索返回电影列表。我想要的是在运行时触发一次的方法,如果这有意义的话?所以每一行都会有不同的值。
-
我仍然不确定我是否理解您到底想要完成什么。正如raina77ow 提到的,第一个明显的问题是您的
checkMovieExists方法没有返回任何内容,因此在模板中的该方法调用中不会呈现任何内容。这看起来确实是您应该使用计算属性的东西(通常直接调用模板中的方法而不是使用计算属性是一种代码气味)。我建议编辑您的代码示例,使其成为您所面临问题的mcve。
标签: javascript vue.js