账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vuex getters取出的值总是undefined
    19
    0

    在我的页面上img死活显示不出来,请指教哪里写的不对,或者实现逻辑有误。

    <template>
        <div class="login" @keydown.enter="handleSubmit">
            <div class="login-con">
                <Card :bordered="false">
                    <p slot="title">
                        <Icon type="log-in"></Icon>
                        欢迎登录
                    </p>
                    <div class="form-con">
                        <Form ref="loginForm" :model="form">
                            <FormItem prop="username">
                                <Input v-model="form.username" size="large" placeholder="请输入用户名">
                                    <Icon :size="16" type="person" slot="prepend"></Icon>
                                </Input>
                            </FormItem>
                            <FormItem prop="password">
                                <Input type="password" size="large" v-model="form.password" placeholder="请输入密码">
                                    <Icon :size="14" type="locked" slot="prepend"></Icon>
                                </Input>
                            </FormItem>
                            <FormItem prop="verification">
                                <Input v-model="form.verification" size="large" placeholder="请输入验证码">
                                    <Icon :size="14" type="social-angular" slot="prepend"></Icon>
                                    <a href="javascript: void(0);" @click="refresh" slot="append" title="点击刷新验证码">
                                        <img v-show="captcha" :src="captcha"/>
                                    </a>
                                </Input>
                            </FormItem>
                            <FormItem>
                                <Button type="primary" size="large" long>登录</Button>
                            </FormItem>
                        </Form>
                    </div>
                </Card>
            </div>
        </div>
    </template>
    
    <script>
    export default {
        data () {
            return {
                form: {
                    username: '',
                    password: '',
                    captchaId: this.$store.getters.captchaId,
                    verification: ''
                }
            };
        },
        methods: {
            refresh () {
              this.$store.dispatch('Captcha');
            }
        },
       beforeCreate (){
            this.$store.dispatch('Captcha');
       },
       computed: {
         captcha: function () {
           return this.$store.getters.captcha;
         }
       }
    };
    </script>
    import { login, captcha } from '@/api/users'
    import { getToken, setToken, removeToken, setAccess, removeAccess } from '@/utils/auth'
    
    const user = {
      state: {},
      mutations: {
        SET_CAPTCHA_INFO: (state, captchaInfo) => {
          console.log(state);
          state.captchaId = captchaInfo.captchaId;
          state.captcha = captchaInfo.captcha;
        }
      },
      actions: {
        Captcha ({commit}) {
          return new Promise((resolve, reject) => {
            captcha().then(response => {
              const resp = response.data;
              commit('SET_CAPTCHA_INFO', resp.data);
              resolve()
            }).catch(error => {
              reject(error)
            })
          })
        }
      }
    };
    export default user;
    import Vue from 'vue';
    import Vuex from 'vuex';
    
    import app from './modules/app';
    import user from './modules/user';
    import getters from './getters'
    
    Vue.use(Vuex);
    
    const store = new Vuex.Store({
        state: {
            //
        },
        mutations: {
            //
        },
        actions: {
    
        },
        modules: {
            app,
            user
        },
        getters
    });
    
    export default store;
    
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • ╰静若安然ぴ 普通会员 1楼

      在Vue.js中,当你尝试使用getters来获取对象的属性值时,如果对象本身为空或者属性不存在,那么在访问getters获取到的值时,就会返回undefined

      例如:

      ```javascript const state = { data: {}, getters: { fetchData: state => { if (state.data === undefined) { return; } return state.data; } } };

      this.$store.dispatch('fetchData');

      console.log(state.data); // undefined ```

      在这个例子中,我们尝试访问state.data的属性,但是state.dataundefined,所以getters获取到的值也是undefined

      为了解决这个问题,你可以先检查state.data是否为空,如果不为空,再返回值。或者你也可以使用条件语句来检查属性是否存在。

      ```javascript const state = { data: {}, getters: { fetchData: state => { if (state.data) { return state.data; } else { return; } } } };

      this.$store.dispatch('fetchData');

      console.log(state.data); // undefined ```

      在这个例子中,我们首先检查state.data是否为空,如果为空,那么就返回undefined。如果state.data不为空,那么就返回state.data

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部