Vuetify如何在数据表中打开和关闭对话框

时间:2018-03-30 19:37:33

标签: javascript vue.js dialog vuetify.js

我们为员工公司构建了一个应用程序,管理员可以在Vuetify数据表中查看用户。在该表中,我们希望显示用户注释,但它们有时很长并且不适合表格单元格。我们只想单击一个按钮,然后在对话框中打开Notes。

问题是,如果我们有200个用户,并且我们点击按钮打开" dialogNotes",则会打开每个用户对话框。我们如何调整代码以便只打开该用户的对话框?

<template slot="items" slot-scope="props">
                <td>
                <v-checkbox
                  primary
                  hide-details
                  v-model="props.selected"
                ></v-checkbox>
              </td>
                <td>{{props.item.status}}</td>
                <td>
          <img v-if="props.item.photoUrl" :src="props.item.photoUrl" class="user-img">
          <img v-if="!props.item.photoUrl" src="/static/avatar.png" class="user-img">
        </td>
                <td>
                <router-link v-if="props.item.name" v-bind:to="'/staff/' + props.item.id">{{ props.item.name }}</router-link>
        <router-link v-if="!props.item.name" v-bind:to="'/staff/' + props.item.id">{{ props.item.id }}</router-link>
                </td>
                <td>
                <v-btn icon color="primary" small @click.stop="dialogNote = true"><v-icon small>open_in_new</v-icon></v-btn>
                    <v-dialog v-model="dialogNote" scrollable lazy max-width="500" :key="props.item.id">
                    <v-card>
                      <v-card-title>
                        <span>{{ props.item.name }} Note</span>
                      </v-card-title>
                      <v-card-text>
                        {{props.item.note}}
                      </v-card-text>
                      <v-card-actions>
                        <v-btn color="primary" flat @click.stop="dialogNote=false">Close</v-btn>
                      </v-card-actions>
                    </v-card>
                  </v-dialog>
                </td>
                <td>{{props.item.greek}}</td>
                <td>
                <span v-if="props.item.tipsUrl">Yes</span>
              </td>
                <td>{{props.item.waiver}}</td>
                <td>{{props.item.media}}</td>
              <td>{{ props.item.howHear }}</td>
            </template>

数据:

dialogNote: false,

2 个答案:

答案 0 :(得分:2)

dialogNote转换为对象并使用dialogNote[props.item.id]来判断该项目是否已打开。

data中声明它,如:

dialogNote: {},

并使用它:

 <v-dialog v-model="dialogNote[props.item.id]" scrollable lazy max-width="500" :key="props.item.id">

然后更改打开/关闭按钮。

  • 打开:

    • @click.stop="dialogNote = true"
      
    • 要:

      @click.stop="$set(dialogNote, props.item.id, true)"
      
  • 关闭:

    • @click.stop="dialogNote = false"
      
    • 要:

      @click.stop="$set(dialogNote, props.item.id, false)"
      

您的模板:

&#13;
&#13;
<template slot="items" slot-scope="props">
<td>
  <v-checkbox primary hide-details v-model="props.selected"></v-checkbox>
</td>
<td>{{props.item.status}}</td>
<td>
  <img v-if="props.item.photoUrl" :src="props.item.photoUrl" class="user-img">
  <img v-if="!props.item.photoUrl" src="/static/avatar.png" class="user-img">
</td>
<td>
  <router-link v-if="props.item.name" v-bind:to="'/staff/' + props.item.id">{{ props.item.name }}</router-link>
  <router-link v-if="!props.item.name" v-bind:to="'/staff/' + props.item.id">{{ props.item.id }}</router-link>
</td>
<td>
  <v-btn icon color="primary" small @click.stop="$set(dialogNote, props.item.id, true)">
    <v-icon small>open_in_new</v-icon>
  </v-btn>
  <v-dialog v-model="dialogNote[props.item.id]" scrollable lazy max-width="500" :key="props.item.id">
    <v-card>
      <v-card-title>
        <span>{{ props.item.name }} Note</span>
      </v-card-title>
      <v-card-text>
        {{props.item.note}}
      </v-card-text>
      <v-card-actions>
        <v-btn color="primary" flat @click.stop="$set(dialogNote, props.item.id, false)">Close</v-btn>
      </v-card-actions>
    </v-card>
  </v-dialog>
</td>
<td>{{props.item.greek}}</td>
<td>
  <span v-if="props.item.tipsUrl">Yes</span>
</td>
<td>{{props.item.waiver}}</td>
<td>{{props.item.media}}</td>
<td>{{ props.item.howHear }}</td>
</template>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

  

在我看来,使用vuetify进行数据表和对话是一种更好,更清晰的方法。

同样在下面的示例中,当您想要编辑它们时,将为每个用户打开对话框。

Vuetify提供数据表 CRUD操作,您可以编辑,删除和添加新项目。更多look here