Vue中如何从B-modal提交表单数据

Posted

技术标签:

【中文标题】Vue中如何从B-modal提交表单数据【英文标题】:How To Submit Form Data From B-modal In Vue 【发布时间】:2019-04-15 14:38:02 【问题描述】:

所以我在尝试从 Vue 组件中的 b-modal 提交表单数据时遇到问题。我可以在我的开发工具中看到数据对象正在填充数据,但是当我提交表单时它不会发送我的数据。

这是表格

 <b-modal v-model="modalShow" id="myModal">
      <form>
        <div>
          <br>
            <input type="text" placeholder="Name" v-model="user.name">
          <br>
            <input type="text" placeholder="Email" v-model="user.email">
          <br>
            <input type="text" placeholder="Password" v-model="user.password">
          <br>
        </div>
        <div>
          <b-btn @click="modalShow = false">Cancel</b-btn>
          <b-btn variant="outline-primary" @click="addUser">Create</b-btn>
        </div>
      </form>
    </b-modal>

这是组件中的数据对象和方法

data() 
    return 
       modalShow: false,
       user: 
          name: '',
          email: '',
          password: '',
       
    
  ,
  components:
    'b-modal': bModal,
  ,
  directives: 
    'b-modal': bModalDirective
  ,
  computed: 
    ...mapGetters(['users']),
  ,
  methods: 
    addUser() 
      this.$store.dispatch('addUser', 
          name: this.user.name,
          email: this.user.email,
          password: this.user.password,
      )
    
   ,

这里是正在调度的 store 方法

addUser(user) 
      return new Promise((resolve, reject) => 
        axios.post('/register', 
          name: user.name,
          email: user.email,
          password: user.password,
        )
        .then(response => 
          console.log(response)
          resolve(response)
        )
        .catch(error => 
          reject(error.response.data)
        )
      )
    ,

如果我在处理后端数据之前进行返回响应,则会显示一个空数据对象。任何想法为什么?

【问题讨论】:

axios.post('/register', name: user.name, email: user.email, password: user.password, ) this.user.name, this.user.email, this.user.password 测试 @HamiltonGabriel,你是说将name: user.name 更改为name: this.user.name 正确,测试一下。 @HamiltonGabriel,查看答案。 【参考方案1】:

vuex action 中的第一个参数是context 对象,payload 作为第二个参数传递

addUser(context, user) 
      return new Promise((resolve, reject) => 
        axios.post('/register', 
          name: user.name,
          email: user.email,
          password: user.password,
        )
        .then(response => 
          console.log(response)
          resolve(response)
        )
        .catch(error => 
          reject(error.response.data)
        )
      )
    

【讨论】:

是的,我想了一会儿,但谢谢你的评论

以上是关于Vue中如何从B-modal提交表单数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从表单容器Vue之外的另一个组件提交表单

vue提交表单后清空

Vue获取表单数据的方法

如何在Vue中提交表单,重定向到新路由并传递参数?

带有子表单的Vue模态对话框,提交数据

使用 ajax 在 Vue.js 中提交表单