बाहरी जेएस फ़ाइल में किसी ऑब्जेक्ट के रूप में स्टोर को एक्सेस करना संभव है, मैंने राज्य में बदलावों को प्रदर्शित करने के लिए एक परीक्षण भी जोड़ा है।
यहां बाहरी जे एस फ़ाइल है:
import { store } from '../store/store'
export function getAuth() {
return store.state.authorization.AUTH_STATE
}
राज्य मॉड्यूल:
import * as NameSpace from '../NameSpace'
/*
Import everything in NameSpace.js as an object.
call that object NameSpace.
NameSpace exports const strings.
*/
import { ParseService } from '../../Services/parse'
const state = {
[NameSpace.AUTH_STATE]: {
auth: {},
error: null
}
}
const getters = {
[NameSpace.AUTH_GETTER]: state => {
return state[NameSpace.AUTH_STATE]
}
}
const mutations = {
[NameSpace.AUTH_MUTATION]: (state, payload) => {
state[NameSpace.AUTH_STATE] = payload
}
}
const actions = {
[NameSpace.ASYNC_AUTH_ACTION]: ({ commit }, payload) => {
ParseService.login(payload.username, payload.password)
.then((user) => {
commit(NameSpace.AUTH_MUTATION, {auth: user, error: null})
})
.catch((error) => {
commit(NameSpace.AUTH_MUTATION, {auth: [], error: error})
})
}
export default {
state,
getters,
mutations,
actions
}
दुकान:
import Vue from 'vue'
import Vuex from 'vuex'
import authorization from './modules/authorization'
Vue.use(Vuex)
export const store = new Vuex.Store({
modules: {
authorization
}
})
अब तक सब मैंने किया है एक js फ़ाइल बनाने है जो authorization
राज्य चर की संपत्ति को वापस करने वाला फ़ंक्शन निर्यात करता है।
के परीक्षण के लिए एक घटक:
<template lang="html">
<label class="login-label" for="username">Username
<input class="login-input-field" type="text" name="username" v-model="username">
</label>
<label class="login-label" for="password" style="margin-top">Password
<input class="login-input-field" type="password" name="username" v-model="password">
</label>
<button class="login-submit-btn primary-green-bg" type="button" @click="login(username, password)">Login</button>
</template>
<script>
import { mapActions, mapGetters } from 'vuex'
import * as NameSpace from '../../store/NameSpace'
import { getAuth } from '../../Services/test'
export default {
data() {
return {
username: '',
password: ''
}
},
computed: {
...mapGetters({
authStateObject: NameSpace.AUTH_GETTER
}),
authState() {
return this.authStateObject.auth
},
authError() {
return this.authStateObject.error
}
},
watch: {
authError() {
console.log('watch: ', getAuth()) // ------------------------- [3]
}
},
authState() {
if (this.authState.sessionToken) {
console.log('watch: ', getAuth()) // ------------------------- [2]
}
},
methods: {
...mapActions({
authorize: NameSpace.ASYNC_AUTH_ACTION
}),
login (username, password) {
this.authorize({username, password})
console.log(getAuth()) // ---------------------------[1]
}
}
}
</script>
बटन क्लिक डिफ़ॉल्ट स्थिति पर कंसोल पर लॉग इन कर रहा है। मेरे मामले में कार्रवाई के परिणामस्वरूप एक एपीआई कॉल होता है, जिसके परिणामस्वरूप राज्य परिवर्तन होता है यदि उपयोगकर्ता नाम - पासवर्ड संयोजन में रिकॉर्ड होता है।
authState
घड़ी में कंसोल दिखाने में सफलता का परिणाम परिणाम, आयातित कार्य राज्य में किए गए परिवर्तनों को प्रिंट कर सकता है।
इसी तरह, एक असफल मामले पर, authError
पर नजर राज्य
में किए गए परिवर्तनों मैं पूरी तरह से समझ न के रूप में मैं नहीं कर सकते अपनी फ़ाइलें लेकिन vue.use (vuex) देखने दिखाएगा अपने सभी Vue को vuex कहते हैं अवयव। कौन सा कारण हो सकता है कि आपके utils.js तक इसका उपयोग क्यों नहीं होगा। मैंने बाहरी कार्यों को क्रियाओं का एक हिस्सा होने दिया, जो राज्य को तर्क के रूप में लेते हैं और उत्परिवर्तन के लिए मूल्य वापस करते हैं। –
कोई डेमो फाइल नहीं है क्योंकि यह एक 'सामान्य मुद्दा' है। और हाँ, मुझे पता है कि इसे एक vue-file के अंदर कैसे हल किया जाए, लेकिन मेरा सवाल यह है कि 'जेएस फ़ाइल में राज्य कैसे प्राप्त करें'। आपका 'समाधान' मुझे स्पष्ट नहीं है; ऐसा लगता है कि आप सिर्फ vue-file ('बाहरी कार्यों' का उपयोग करके) के भीतर राज्य के पास आ रहे हैं। हालांकि, मैं (यदि संभव हो) एक जेएस फ़ाइल के भीतर से vue राज्य दृष्टिकोण करना चाहता हूँ। – musicformellons
हां, मैं बाहरी रूप से राज्य को बदलना पसंद नहीं करता हूं। क्या आप यह जान सकते हैं कि आप यूटिल में किस तरह का काम कर रहे हैं? क्योंकि मुझे दृढ़ता से लगता है कि विएक्स क्रियाओं या उत्परिवर्तनों का उपयोग करने से वेयूक्स स्टोर के बाहर राज्य प्राप्त करने की आवश्यकता को खत्म कर दिया जाएगा। –