0
我正在使用webpack,vue,vuex,vue-loader等。我不确定是否将所有设置正确。vue.js:如何从操作中访问组件数据?
// login component .vue
<template>
<form>
<input type="email" name="email" placeholder="Email" v-model="logininfo.email">
<input type="password" name="password" v-model="logininfo.password">
<button @click.prevent="login(logininfo.email, logininfo.password)">Login</button>
</form>
</template>
<script>
import { login } from '../../vuex/actions'
export default {
data: function() {
return {
logininfo: {
email: null,
password: null
}
}
},
vuex: {
actions: {
login
}
}
}
</script>
,然后我的行动:
// vuex/actions.js
import Vue from 'vue'
import VueResource from 'vue-resource'
Vue.use(VueResource)
export const login = ({dispatch}, email, password) => {
dispatch('LOGIN_REQUEST')
Vue.http.post('/login', {email, password}).then((response) => {
dispatch('LOGIN_SUCCESS')
}, (response) => {
dispatch('LOGIN_FAILURE')
})
}
我遇到的问题是,由于这种形式正在使用AJAX“提交”,形式投入保持在填充时响应返回无效的。所以我需要一种方法来从动作中设置logininfo.password = ''
来清除表单字段。但是我不确定如何再次访问该组件的数据。也许我误解了一些东西,这个数据(logininfo)应该真的在vuex商店?我觉得这个数据不应该在主状态存储中,因为我真的只是使用它来将凭据传递给后端,这就是为什么我将数据本地化到组件。
任何提示/建议?
你在哪里抓到“LOGIN_FAILURE”事件?这可能是你会向用户显示正确信息的地方?在那里,你可以清除密码字段,如果需要,作为“登录失败”进程的一部分。为了访问父组件的属性,你可以命名子组件并使用'v-ref'指令。然后从父母你可以做这样的事情:'this。$ refs.mycomponent.logininfo.password' – crabbly