반응형
Vue: v-for에서 메소드를 사용하지만 Getter가 준비되지 않음
내 템플릿에 이름을 가져오는 방법을 사용하는 v-for가 있어.v-for는 페이지 로드에 즉시 적중되고 각 인덱스에 대한 메소드를 통해 실행되므로pages
나는 보통 처음 몇 루프는 정의되지 않았다.let pages = this.$store.getters['section2/getPages']
이 문제를 해결할 더 좋은 방법이 있을까?
템플릿:
<div class="target-box-child" v-for="(target,index) in this.$store.getters['liveDashboard/getDesiredTargets']" :key="index">
<div>{{ getGroupOrPageName(target) }}</div>
</div>
methods: {
getGroupOrPageName: function(target) {
if (target.type == "page") {
let pages = this.$store.getters['section2/getPages'];
if (!pages || pages.length == 0) {
return;
}
pages.filter(page => {
return page.id == target.id;
})
return "FB Page: " + pages[0].name;
}
},
}
항상 그렇듯이, 템플릿의 일부를 렌더링하는 방법을 사용하는 것은 좋지 않은 생각이다.
대신, 두 가지 모두에 반응하는 페이지 배열을 만들기 위해 계산된 속성을 만들 것이다.liveDashboard/getDesiredTargets
그리고section2/getPages
줍는 사람들
또한 당신은 또한 그것을 사용할 수 있다.mapGetters
그 긴 게터들 이름들 중 일부를 줄여주는 도우미.
<div class="target-box-child" v-for="targetPage in targetPages" :key="targetPage.id">
<div>FB Page: {{ targetPage.name }}</div>
</div>
import { mapGetters } from "vuex"
export default {
computed: {
...mapGetters("liveDashboard", {
targets: "getDesiredTargets" // alias "liveDashboard/getDesiredTargets" as "this.targets"
}),
...mapGetters("section2", {
pages: "getPages" // alias "section2/getPages" as "this.pages"
}),
targetPages: ({ targets, pages }) => {
// create a map for easy location
const pagesById = (pages ?? []).reduce((map, page) =>
map.set(page.id, page), new Map())
// find the "page" target IDs
const targetIds = targets.filter(({ type }) => type === "page")
.map(({ id }) => id)
// now build up an array from the target IDs
return targetIds.reduce((arr, id) => {
if (pagesById.has(id)) {
arr.push(pagesById.get(id))
}
return arr
}, [])
}
}
}
당신은 당신의 게이터를 위해 계산된 속성을 만들어야 한다.가장 좋은 방법은 보일러 판 코드를 줄이기 위해 mapGetter를 사용하는 것이다.
import { mapGetters } from 'vuex'
computed: {
...mapGetters('liveDashboard', ['getDesiredTargets']),
}
그런 다음 템플릿에서 v-for 루프 앞에 v-if 조건을 추가하십시오(이유는 다음과 같다).
<template v-if="getDesiredTargets">
<div class="target-box-child" v-for="(target,index) in getDesiredTargets" :key="index">
<div>{{ getGroupOrPageName(target) }}</div>
</div>
<template />
참조URL: https://stackoverflow.com/questions/64202252/vue-using-a-method-in-a-v-for-but-the-getter-isnt-ready
반응형
'programing' 카테고리의 다른 글
Vuex는 이것을 저장한다.$store가 Vue.js 구성 요소에 정의되지 않음 (0) | 2022.04.18 |
---|---|
하위 구성 요소를 기반으로 계산된 속성 (0) | 2022.04.18 |
문자열의 해시 함수 (0) | 2022.04.18 |
InputStream을 Java의 String으로 읽거나 변환하는 방법 (0) | 2022.04.18 |
VueJ를 사용하여 테이블에서 행 제거s (0) | 2022.04.18 |