- 69
- 0
目前碰到一个非常棘手的问题,当前项目采用的是vue+elemenuUI,有这样一个业务场景:
页面中有三个视图:
1,一个tree组件(采用的elementui的tree)
[{
Id,
Name,
status,
Type
Children:
[{
Id,
Name,
GIS, // 地图坐标 [lng,lat]
status, // 三种状态(未选,半选,全选)
Type,
}]
}]
2,一个百度地图
[{
Id,
Name,
GIS, // 地图坐标 [lng,lat]
status, // 三种状态(未选,半选,全选)
Type
}]
3,一个可以分类的列表(采用的elementui的tabs跟table组件)
[{
Id,
Name,
status, // 两种状态
Type
}]
数据源一次性从后台拉过来之后.三个视图的数据全部同步显示.默认都是未勾选状态.
要实现的功能就是三种视图的状态同步。
他们都有选中,未选中状态,(地图还有半选中状态),为什么会有半选中状态..因为我们的业务场景是这样:
一个设备下绑定了很多个设备
拉回来的数据可能是这样的:
[
{
id: 1,
name: "分类一",
children: [
{
id: 4,
name: "综合设备",
status: // 未选,全选,半选
children: [
{
id: 11,
name: "子设备1",
status: false,
type: "class1"
},
{
id: 21,
name: "子设备2",
status: false,
type: "class2"
},
{
id: 31,
name: "子设备3",
status: false,
type: "class3"
}
]
},
{
id: 2,
name: "分类二",
children: [
{
id: 3,
name: "综合设备二",
status: // 未选,全选,半选
children: [
{
id: 12,
name: "子设备4",
status: false,
type: "class1"
},
{
id: 22,
name: "子设备5",
status: false,
type: "class2"
},
{
id: 32,
name: "子设备6",
status: false,
type: "class3"
}
]
}
]
也就是说tree组件的某个节点(包括父节点)选中之后。。地图跟分类列表都要状态同步。。反之其它也一样。。table还有全选功能
table这儿的分类标签实现方式:
因为数据分类不确定。只能动态循环加载。每个table绑定的数据源是经过过滤的源数据
tab标签的分类是后台返回的,数据结构大概是这样:
tabList: [
{
label: "设备分类一",
type: "class1"
},
{
label: "设备分类二",
type: "class2"
},
{
label: "设备分类二",
type: "class2"
}
]
<el-tabs type="border-card">
<el-tab-pane v-for="(item,index) in tabList" :key="item.label">
<span slot="label"><i class="el-icon-date"></i> {{item.label}}</span>
<el-table
:data="sortByType(originalData,item.type)"
height="350"
v-loading.body="listLoading"
element-loading-text="拼命加载中"
@select="handleSelect"
@select-all="handleSelectAll(sortByType(originalData,item.type))"
:ref="item.type"
fit highlight-current-row>
<el-table-column type="selection"></el-table-column>
<el-table-column :key="item.dataIndex" v-for="(item,index) in columns" :label="item.text">
<template slot-scope="scope">
{{scope.row[item.dataIndex]}}
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
// 源数据结构
originalData: [
{
id: 11,
name: "设备一",
checked: false,
type: "class1"
},
{
id: 12,
name: "设备二"",
checked: false,
type: "class1"
},
{
id: 13,
name: "设备三",
checked: false,
type: "class1"
},
{
id: 21,
name: "LED一",
checked: false,
type: "class2"
},
{
id: 22,
name: "LED二",
checked: false,
type: "class2"
},
{
id: 31,
name: "视频一",
checked: false,
type: "class3"
},
{
id: 32,
name: "视频三",
checked: false,
type: "class3"
}
]
// 分类显示数据
sortByType(data, type) {
return data.filter(value => {
return value.type === type;
});
}
也就是通过type来显示分类数据,这儿的实现方式很难看。:data="sortByType(originalData,item.type)" 不知道还有没有其它办法.
我目前的想法是以tree的数据结构作为源数据绑定,地图数据跟分类的table列表绑定源数据通过computed计算之后的结果.(比如上面的originalData,因为这儿的数据结构不一样,不知道是否可行?)
地图就只拉取综合设备的所有节点,如果他的叶子节点没有全选中。就返回半选中状态。这儿也是一个难点.
但现在的难题在于因为tree组件是没办法直接更改他绑定的数据源的数据状态.包括table组件的checkbox也一样..我没办法将更改状态后的效果提现出来
不知道大家有没有碰到过类似的场景。。我该怎么解决目前的业务场景。。我的想法也很不成熟。。还望大家多多指教。。感谢!
- 共 0 条
- 全部回答
-
京紫的第三人称 普通会员 1楼
在Element UI的Tree组件中,数据的双向绑定可以通过自定义数据源(Scope)来实现。以下是一个简单的示例:
```javascript import { Tree } from 'element-ui';
// 自定义数据源 const data = [ { path: '部门', children: [ { path: '经理', children: [ { path: '张三', children: [ { path: '李四', children: [] } ] } ] } ] }, { path: '员工', children: [ { path: '张三', children: [] }, { path: '李四', children: [ { path: '王五', children: [] } ] } ] } ];
// 创建Tree组件 const tree = new Tree({ data, defaultExpandedKeys: ['经理'], showLine: true, lineStyle: { width: '100%' } });
// 绑定数据源 tree.connect('node', 'value').connect('parent', 'children');
// 在数据发生变化时触发更新事件 tree.$on('update', () => { console.log(tree.data); });
// 在数据发生变化时触发渲染事件 tree.$on('render', () => { console.log(tree.$el.innerHTML); }); ```
在这个示例中,我们首先定义了一个自定义数据源,然后在Tree组件中创建了一个Tree对象。我们还使用connect方法将数据源和Tree组件的属性进行绑定。然后,我们使用$on方法监听数据的变化事件,当数据发生变化时,Tree组件将触发更新事件。最后,我们使用$on方法监听Tree组件的渲染事件,当数据发生变化时,Tree组件将触发渲染事件。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

