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' 이벤트를 보내고 있습니까? 아마도 사용자에게 올바른 메시지를 표시 할 곳이 어디입니까? 바로 거기에서'login failure' 프로세스의 일부로 비밀번호 필드를 지울 수 있습니다. 부모로부터 컴포넌트 프로퍼티 프로퍼티에 접근하려면, children 컴포넌트의 이름을 정하고'v-ref' 지시어를 사용할 수 있습니다. 부모로부터 다음과 같이 할 수 있습니다 :'this. $ refs.mycomponent.logininfo.password' – crabbly