问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

vue怎么实现封装方法

发布网友 发布时间:2022-04-29 21:23

我来回答

2个回答

懂视网 时间:2022-05-14 21:35

<template>
 <p class="contains">
 <h1>树表格实现</h1>
 <tree-table ref="recTree"
 :list.sync="treeDataSource"
 @actionFunc="actionFunc"
 @deleteFunc="deleteFunc"
 @orderByFunc="orderByFunc"></tree-table>
 </p>
</template>
<script>
import treeTable from '@/components/tree-table.vue'
export default {
 data() {
 return {
 list: [], // 请求原始数据
 treeDataSource: [] // 组合成树表格接收的数据
 }
 },
 components: {
 treeTable
 },
 methods: {
 orderByFunc(val) {
 alert('排序')
 alert(val)
 },
 actionFunc(m) {
 alert('编辑')
 },
 deleteFunc(m) {
 alert('删除')
 }
 }
}
</script>
原始数据`list`:是不包含子数据的数据结构,即没有层级结构,例如:
[{id:111,parentId:0,name:'父及'},{id:111,parentId:111,name:'子级'}...],通过parentId来获取对应父子层级结构
`treeDataSource`:是树表格需要的数据结构,例如:
[{id:0,name:'父及',children:[{id:10,name:'子级',children:[]}]},...]
如果后台返回给你的是原始数据格式,就可以用下面方法封装成树表格可以使用的数据结构:
 getTreeData() {
 // 取父节点
 let parentArr = this.list.filter(l => l.parentId === 0)
 this.treeDataSource = this.getTreeData(this.list, parentArr)
 },
 // 这里处理没有children结构的数据
 getTreeData(list, dataArr) {
 dataArr.map((pNode, i) => {
 let childObj = []
 list.map((cNode, j) => {
  if (pNode.Id === cNode.parentId) {
  childObj.push(cNode)
  }
 })
 pNode.children = childObj
 if (childObj.length > 0) {
  this.getTreeData(list, childObj)
 }
 })
 return dataArr
 }
tree-table.vue页面。此页面是实现树表格的关健页面。主要代码如下:
<template>
 <p class="tree-table">
 <p class="tree-head">
  <table>
  <tr>
   <td class="td1">职位名称</td>
   <td class="td2">负责人</td>
   <td class="td3" @click="isDesc=!isDesc">
   创建时间
   <p class="arrow">
    <span class="up-arrow" :class="{'sort':isDesc}"></span>
    <span class="down-arrow" :class="{'sort':!isDesc}"></span>
   </p>
   </td>
   <td class="td4">工作经验</td>
   <td class="td5">发布时间</td>
   <td class="td6">操作</td>
  </tr>
  </table>
 </p>
 <p id="scrollWrap" class="tree-wrap">
  <p class="tree-body">
  <table v-if='treeDataSource.length>0'>
   <tbody>
   <tr>
    <td>
    <tree-item
     v-for="(model,i) in treeDataSource"
     :key="'root_node_'+i"
     :root="0"
     :num="i"
     @actionFunc="actionFunc"
     @deleteFunc="deleteFunc"
     :nodes="treeDataSource.length"
     :trees.sync="treeDataSource"
     :model.sync="model">
    </tree-item>
    </td>
   </tr>
   </tbody>
  </table>
  </p>
 </p>
 </p>
</template>

首先这里的子组件tree-item没有在页面上有引入,但是也可以正常使用。这里就是关健点,因为这个子组件是需要递归实现,所以,需要动态注册到当前组件中。代码如下(由于代码太多,先贴图说明吧,点击这里可以看源码):

2317368822-5b5825f1f388a_articlex.png

这里子组件看起来是不是挺奇怪的,但是为了递归他本身,暂时也只想到这种办法。如果有更好的办法,欢迎留言指正。

那么,树表格的结构实现在哪里呢??对,就是在子组件的模版(template)里面,这里就不贴代码了,可以移步到源码查看。

指正,现已将原有写法更新,采用递归组件来实现,这样页面看起来就更清晰。

 components: {
  treeItem: () => import('./tree-item.vue')
 }

补充一点:不要只看js部分,css部分才是这个树表格的关健所在。当然里面我采用了大量的计算属性去判断各种样式的展示,还有一种方法,就是在initTreeData方法里面去实现,这个方法就是处理或添加一些我们树表格所使用的信息。比如我现在在里面实现的层级线的偏移量m.bLeft = level === 1 ? 34 : (level - 2) * 16 + 34 。

热心网友 时间:2022-05-14 18:43

放到单独的文件里,比如 util.js

function hello(){
    console.log("hello world");
}
function hi(){
    console.log("hi");
}

export { hello, hi };

其他文件引用

import { hello } from './util.js';  //根据目录自行修改

hello();

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
《火星异种》揭示了怎样的人性丑恶。? 日本哪些漫画动作(战斗类)设计较好,较为细致?并请稍微分析 新的一学年马上开学了,想送老师一件开学礼物,实用性强的。 开学送老师什么礼物? 未办理不动产的 没办登记的抵押合同怎么办 欠债人失联后的处理办法 早上肚子胀是什么原因 梦见姐姐去外地工作 电脑中所存的文件都在哪儿 鲁迅有哪些散文集和散诗集 王者荣耀的最高英雄评分为16分,你的超神英雄又能拿到多少分? 王者荣耀怎么提高英雄评分 王者荣耀评分到底怎么个评法,我是那个Lee,为什么我是2分,虚心求解... 王者荣耀英雄评分 王者荣耀评分低原因 鲁迅的散文集和小说集 王者荣耀的最高评分是多少 新浪微博别人转发了我的评论,我删了,别人那里还会有吗 王者荣耀英雄分评分怎么计算 新浪微博被封号解封后给别人微博的评论还在吗? 王者荣耀英雄综合得分? 新浪微博用户名换掉了是不是评论也没有了 王者荣耀的评分机制是怎样的 王者荣耀综合评分多少算强 王者荣耀英雄评分怎么算 高速公路上的摄像头是如何对超速行驶的汽车拍照的? 给《王者荣耀》英雄的平衡性评分,你认为可以打几分? 高速公路摄像头是怎么给超速的车拍照的? 高速上这种摄像头是干嘛的?测速吗 vue 怎样封装方法在 ...on方法用来调用,emit方法用来调用,参数和vue的$on $emit一样_百度... vue 有OpenTextFile方法吗? 接入飞洛印API如何进行封装 用手机号算出你的年龄,这是什么原理 用2022年用手机号算年龄 用手机号算出你的年龄,这是什么原理? 从你的手机号码就可以透露你的年龄原理是什么? 为什么能通过手机号最后一位算出年龄 vintage sex是什么意思 手机号怎么筛选年龄段的人员 为什么我同事的男朋友仅仅用一个手机号码就知道对方姓名户籍年龄? Vintage; Reprint什么意思 tcl电视电源灯亮黑屏 TCL电视机开不了机,电源指示灯闪烁,按什么都没有反应是怎么回事 TCL开机,电源灯有闪烁,屏幕黑屏,什么问题? TCL液晶电视显示灯闪烁屏幕黑屏普遍是哪个板子坏 TCL液晶电视按遥控器开机电源指示灯一直闪烁,开机一直黑屏怎么解决? TCL电视电源指示灯亮,但屏幕没有反应,是怎么回事? 海尔冰箱立梁难卡进去。