Bootstrap-Vue:如何将数据传递给模态?

时间:2018-07-10 17:46:07

标签: vue.js bootstrap-vue

我正在尝试使用bootstrap-vue模式显示项目集合中的详细信息。

我想要的是将数据传递给模式以显示一条简单的消息。

我首先遍历记录集以显示按钮。

<ul>
  <li v-for="item in items">{{ item.first_name }} 
      <b-button size="sm" v-b-modal="'myModal'" user="'item'">
        Saluta {{item.first_name}}
      </b-button> 
  </li>
</ul>

然后以模式显示名称:

<b-modal id="myModal" :user="'user'">
  Hello {{user}}!
</b-modal>

这是我的小提琴https://jsfiddle.net/bptLavov/259/

2 个答案:

答案 0 :(得分:6)

这很好用:

HTML:

<div id="app">
<ul>
  <li v-for="item in items">{{ item.first_name }} <b-button size="sm" v-b-modal="'myModal'" user="'item'" @click="sendInfo(item)">Saluta {{item.first_name}}</b-button></li>
</ul>

    <b-modal id="myModal">
      Hello {{selectedUser.first_name}} {{selectedUser.last_name}} !
    </b-modal>
</div>

JAVASCRIPT:

new Vue({
  el: '#app',
  data: {
    items :
    [
        { first_name: 'Dickerson', last_name: 'Macdonald' },
        { first_name: 'Larsen', last_name: 'Shaw' },
        { first_name: 'Geneva', last_name: 'Wilson' },
        { first_name: 'Jami', last_name: 'Carney' }
    ],
    selectedUser: '',
  }, 
  methods: {
    sendInfo(item) {
        this.selectedUser = item;
    }
  }

})

它的作用是:

1)执行名为sendInfo

的方法

2)通过selectedUser指令(取决于v-on:click (@click)迭代),这些方法将为选定的用户设置数据中的v-for变量,信息将通过该用户发送。因此,每个按钮都会发送正确的信息。

3)在模式内部显示信息

答案 1 :(得分:1)

您可以使用vuex,并且您的组件不必在同一文件中或相关。

将打开模式的组件:

<ul>
  <li v-for="item in items">{{ item.first_name }} 
    <b-button @click="$store.dispatch('modals/openModal', { data: item, modalId: 'myModal' })">
      Saluta {{item.first_name}}
    </b-button> 
  </li>
</ul>

Modal的模板:

<b-modal id="myModal">
  Hello {{selectedUser.first_name}} {{selectedUser.last_name}} !
</b-modal>

模态的计算属性:

selectedUser() { return this.$store.state.modals.modalData },

Vuex模块(modals.js):

const state = {
 modalData: {},
}

const mutations = {
  setModalData(state, data) { state.modalData = data },
}

const actions = {
  openModal(context, data) {
    context.commit('setModalData', data.data)
    $('#' + data.modalId).modal('show')
  },
}