edw*_*ard 4 javascript vue.js vue-component vuejs2 vuetify.js
我尝试构建 av-data-table
并在观察expanded.sync
值时观察到非常奇怪的行为。第1层expanded.sync
值看起来正常,但第2层expanded.sync
有3个连续相同的记录。
我打算观察这个值,在折叠展开的项目时做一些事情。有没有什么解决方案可以检测展开的项目何时折叠?
\n顶层代码
\n<template>\n <v-data-table\n :headers="headers"\n :items="desserts"\n item-key="name"\n :expanded.sync="itemExpanded"\n show-expand>\n >\n <template v-slot:top>\n <v-toolbar height="38" falt color="#cddde1">\n <v-toolbar-title dense> Test </v-toolbar-title>\n </v-toolbar>\n </template>\n <template v-slot:expanded-item="{headers}">\n <td :colspan="headers.length">\n <Show2></Show2>\n </td> \n </template>\n </v-data-table>\n</template>\n<script>\nimport Show2 from "./ShowTest2.vue";\nexport default {\n name: "Show1",\n components: {\n Show2\n },\n data: () => ({\n itemExpanded:[],\n desserts: [\n {\n name: 'Show 1 - item 1',\n calories: 237,\n fat: 9.0,\n carbs: 37,\n protein: 4.3,\n iron: '1%',\n },\n {\n name: 'Show 1 - item 2',\n calories: 262,\n fat: 16.0,\n carbs: 23,\n protein: 6.0,\n iron: '7%',\n },\n \n ],\n headers: [\n {\n text: 'Dessert (100g serving)',\n align: 'start',\n sortable: false,\n value: 'name',\n },\n { text: 'Calories', value: 'calories' },\n { text: 'Fat (g)', value: 'fat' },\n { text: 'Carbs (g)', value: 'carbs' },\n { text: 'Protein (g)', value: 'protein' },\n { text: 'Iron (%)', value: 'iron' },\n { text: "details", value: "data-table-expand" },\n ],\n }),\n watch: {\n itemExpanded(newVal,val){\n console.log('layer 1', newVal);\n },\n },\n};\n</script>\n
Run Code Online (Sandbox Code Playgroud)\n第二层代码
\n<template>\n <v-data-table\n :headers="headers"\n :items="desserts"\n item-key="name"\n :expanded.sync="itemExpanded2"\n show-expand>\n >\n <template v-slot:top>\n <v-toolbar>\n <v-toolbar-title dense> Test2</v-toolbar-title>\n </v-toolbar>\n </template>\n <template v-slot:expanded-item="{headers}">\n <td :colspan="headers.length">\n \n </td> \n </template>\n </v-data-table>\n</template>\n<script>\nexport default {\n name: "Show2",\n data: () => ({\n itemExpanded2:[],\n desserts: [\n {\n name: 'Show 2 - item 1',\n calories: 159,\n fat: 6.0,\n carbs: 24,\n protein: 4.0,\n iron: '1%',\n },\n {\n name: 'Show 2 - item 2',\n calories: 262,\n fat: 16.0,\n carbs: 23,\n protein: 6.0,\n iron: '7%',\n },\n ],\n headers: [\n {text: 'Dessert (100g serving)',align: 'start', sortable: false, value: 'name',},\n { text: 'Calories', value: 'calories' },\n { text: 'Fat (g)', value: 'fat' },\n { text: 'Carbs (g)', value: 'carbs' },\n { text: 'Protein (g)', value: 'protein' },\n { text: 'Iron (%)', value: 'iron' },\n { text: "details", value: "data-table-expand" },\n ],\n }),\n watch: {\n itemExpanded2(newVal,val){\n console.log('layer2', newVal);\n },\n },\n};\n</script>\n
Run Code Online (Sandbox Code Playgroud)\nConsole.log 每层结果一次展开+一次折叠。
\nlayer 1 [__ob__: Observer]\nShowTest.vue?cc9a:66 layer 1 [{\xe2\x80\xa6}, __ob__: Observer]\nShowTest2.vue?5475:56 layer2 [{\xe2\x80\xa6}, __ob__: Observer]\nShowTest2.vue?5475:56 layer2 [{\xe2\x80\xa6}, __ob__: Observer]\nShowTest2.vue?5475:56 layer2 [{\xe2\x80\xa6}, __ob__: Observer]\nShowTest2.vue?5475:56 layer2 [__ob__: Observer]\nShowTest2.vue?5475:56 layer2 [__ob__: Observer]\nShowTest2.vue?5475:56 layer2 [__ob__: Observer]\n
Run Code Online (Sandbox Code Playgroud)\n非常感谢 !
\nwatch
您应该监听item-expanded
为此目的提供的事件,而不是使用 a 。
<v-data-table
:headers="headers"
:items="desserts"
item-key="name"
:expanded.sync="itemExpanded"
show-expand
@item-expanded="onExpand"
>
Run Code Online (Sandbox Code Playgroud)
methods: {
onExpand({ item, value }) {
console.log(item, value);
}
}
Run Code Online (Sandbox Code Playgroud)
此事件返回一个带有item
andvalue
属性的对象。是该item
行的数据,value
是该行现在是否扩展。
归档时间: |
|
查看次数: |
3420 次 |
最近记录: |