:value和@input不适用于vuejs项目

时间:2019-01-21 07:01:13

标签: webpack vuejs2 vuex

我正面临一个奇怪的问题。不知道是什么问题。我有一个Vue组件名称Login.vue。这是代码`

<form action="#" method="POST">
                <label>
                  <i class="icon-cx_user"></i>
                  <input
                    type="text"
                    name="email"
                    placeholder="Email"
                    required="required"
                    :value="loginEmail"
                    @input="SET_LOGIN_EMAIL"
                  >
                </label>
                <label class="cx-login-border">
                  <i class="icon-cx_password"></i>
                  <input
                    type="text"
                    name="password"
                    placeholder="Password"
                    :value="loginPassword"
                    @input="SET_LOGIN_PASSWORD"
                  >
                </label>
                <div class="cx-submit">
                  <a href="#">forgot your password?</a>
                  <button
                    class="nc-button-animate nc-button-medium nc-button-animate-left"
                    :disabled="validToLogin"
                    @click="login"
                  >
                    <span>Login</span>
                  </button>
                </div>
              </form>

当我在电子邮件或密码字段中键入内容时,它会显示对象值。这是我的变异

mutations: {
SET_LOGIN_EMAIL(state, email1) {
  state.loginEmail = email1
},
SET_LOGIN_PASSWORD(state, password) {
  state.loginPassword = password
}

}, 这是输入前后的控制台 Image before input Image after input

但是我在使用vuetifyjs之前已经做过,并且此功能没有问题。 我的 main.js 文件是

import { sync } from 'vuex-router-sync'
import Vue from 'vue'
import moment from 'moment'
import App from './App'
import router from './router'
import store from './store'
// Loader
import Loader from './components/loader/Loader'
import Tabs from './components/tabs/tabs'
import Tab from './components/tabs/tab'
import Tbs from './components/tbs/tbs'
import Tb from './components/tbs/tb'
import Info from './components/notification/Info'
Vue.component('loader', Loader)
Vue.component('tabs', Tabs)
Vue.component('tab', Tab)
Vue.component('tbs', Tbs)
Vue.component('tb', Tb)
Vue.component('info', Info)
/* eslint-disable no-new */
Vue.config.productionTip = false
Vue.prototype.moment = moment
sync(store, router)
new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>'
})

任何帮助,我将不胜感激。谢谢您。顺便说一句,我正在使用webpack。

1 个答案:

答案 0 :(得分:0)

我为您here创建了一个有效的示例。评论很少:

1)我看不到您为什么要在输入时更新商店的原因?单击按钮后,只能执行一次

2)@input事件通过发送并输入事件。实际值嵌套在data下的输入事件内,因此值应在$event.data下。

3)如果在输入时更新存储,它将覆盖先前的输入值

<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/vuex"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<div id="app">
  <followers></followers>
</div>

<div id="followers">
  <div>Login Email: {{_loginEmail }}</div>
  <div>Login Password: {{ _loginPassword }}</div>

  <input type="text" name="email" placeholder="Email" required="required" v-model="loginEmail" @input="onEmailInput">

  <input type="text" name="password" placeholder="Password" v-model="loginPassword" @input="onPassWordInput">

  <button @click="onSave">Save To State</button>
</div>

Vue.component('followers', {
  el: "#followers",
  data() {
    return {
      followers: 0,
      loginEmail: "",
      loginPassword: "",
    }
  },
  created() {
    this.loginEmail = this.$store.state.loginEmail;
  },
  methods: {
   /*  onEmailInput(event) {
      this.$store.dispatch("setEmail", event.data)
    },
    onPassWordInput(event) {
      this.$store.dispatch("setPassword", event.data)
    }, */
    onSave() {
      this.$store.dispatch("setLogin", {
        email: this.loginEmail,
        password: this.loginPassword
      })
    }

  },
  computed: {
    _loginEmail() {
      return this.$store.state.loginEmail
    },
    _loginPassword() {
      return this.$store.state.loginPassword
    }
  }
});

const store = new Vuex.Store({
  state: {
    loginEmail: "",
    loginPassword: ""
  },
  actions: {
    setEmail({
      commit
    }, email) {
      commit("SET_LOGIN_EMAIL", email);
    },
    setPassword({
      commit
    }, password) {
      commit("SET_LOGIN_PASSWORD", password);
    },
    setLogin({
      commit
    }, loginObj) {
      commit("SET_LOGIN_EMAIL", loginObj.email);
      commit("SET_LOGIN_PASSWORD", loginObj.password);

    }
  },
  mutations: {
    SET_LOGIN_EMAIL(state, email1) {
      state.loginEmail = email1
    },
    SET_LOGIN_PASSWORD(state, password) {
      state.loginPassword = password
    }
  }
})

const app = new Vue({
  store,
  el: '#app'
})
相关问题