구성 요소에서 getter를 사용할 수 있는 경우 v-overlay 값을 변경하려면 어떻게 해야 합니까?
Vue.js 애플리케이션 컴포넌트에서 Vuex 스토리지에서 정보를 가져옵니다.이 구성 요소 내에서 스토리지의 데이터를 사용할 수 없을 때까지 v-overlay(프리로더)를 표시하려고 합니다.얼마나 정확하게 만들죠?
<template>
<v-navigation-drawer
v-model="open"
absolute
right>
<v-overlay
:absolute="absolute"
:opacity="opacity"
:value="overlay">
<v-progress-circular
indeterminate
size="64">
</v-progress-circular>
</v-overlay>
<v-checkbox
v-if="!overlay"
hide-details
v-model="selectedGenders"
v-for="gender in genders"
:label="gender"
:value="gender"
:key="gender">
</v-checkbox>
<v-checkbox
v-if="!overlay"
hide-details
v-model="selectedIncomeRanges"
v-for="incomeRange in incomeRanges"
:label="incomeRange"
:value="incomeRange"
:key="incomeRange">
</v-checkbox>
</v-navigation-drawer>
</template>
<script>
import {
mapGetters,
mapActions
} from 'vuex'
export default {
name: 'RightNavigationDrawer',
props: {
open: {
type: Boolean,
default: false
}
},
data () {
return {
absolute: true,
opacity: 0.8,
overlay: true,
selectedGenders: [],
selectedIncomeRanges: []
}
},
mounted () {
this.getGenders()
this.getIncomeRanges()
},
computed: mapGetters('customStore', [
'genders',
'incomeRanges'
]),
methods: mapActions('customStore', [
'getGenders',
'getIncomeRanges'
])
}
</script>
이상적으로는, 다음의 데이터를 추적합니다.loading
상태를 vuex로 표시하여 다른 vuex 상태와 같이 모든 구성 요소에서 사용할 수 있도록 합니다.스토어에서 다음 항목을 만듭니다.loading
부울 상태다음으로 다음과 같이 컴포넌트에서 호출되는 로드 액션을 만듭니다.
loadData({ commit, dispatch }) {
commit('SET_LOADING', true);
const loader1 = dispatch('getGenders')
const loader2 = dispatch('getIncomeRanges')
Promise.all([loader1, loader2]).then(() => {
commit('SET_LOADING', false);
})
}
Promise.all
로딩 액션으로부터 일련의 약속을 받아, 이러한 약속이 모두 해결될 때까지 해결되지 않습니다.이 모든 걸 확실하게getGenders
그리고.getIncomeRanges
행동은 약속도 돌려준다.이제 컴포넌트에서는 맵만loading
그리고.loadData
:
...mapState('customStore', ['loading']),
...mapActions('customStore', ['loadData'])
바꾸다mounted
이 액션을 호출하려면:
mounted() {
this.loadData()
}
이제 확인할 수 있습니다.loading
대신 어디든지overlay
모든 컴포넌트에서 사용할 수 있습니다.이것은 우수한 패턴입니다. 왜냐하면 지금은loading
는 다른 상태와 함께 vuex에 한 번만 저장되며 로컬로 관리 및 전달되지 않고 모든 구성 요소에서 사용할 수 있습니다.
이것은 타임아웃으로 AJAX 콜을 시뮬레이트하는 데모입니다.(이 예에서는 단일 파일을 사용하여 vuex + vue를 관리하고 있기 때문에 약간 다르게 보이지만 쉽게 따라할 수 있습니다.)
시계를 차다overlay
(Vuex 스토리지에서 가져옵니다).예를 들어 이 값은this.overlay = true
watch: {
overlay (val) {
val && setTimeout(() => {
this.overlay = false
}, 3000)
},
},
언급URL : https://stackoverflow.com/questions/59102489/how-to-change-the-value-of-v-overlay-if-getters-are-available-in-component
'programing' 카테고리의 다른 글
Vue.js 및 Vuex: 이거.$store가 정의되지 않았습니다. (0) | 2022.10.03 |
---|---|
Maven에 종속성 추가 (0) | 2022.10.03 |
const char*연결 (0) | 2022.09.19 |
JavaScript에서 정의되지 않은 변수를 확인하는 방법 (0) | 2022.09.19 |
관찰 가능한 목록 결합 후 모두 완료될 때까지 기다립니다. (0) | 2022.09.19 |