• key值的应用场景


    我们知道我们在v-for中会绑定对应的key值,这个key作为虚拟dom的身份标识,当响应式更新时,diff算法会将key值进行比对,根据新旧虚拟dom的key决定是否重新渲染。

    除了在v-for身上他也可以巧妙的利用在组件上

    1、各类组件,比如el-tree,el-table比较实用

    1.1、el-tree

    如下图我们的树上有个刷新按钮。很多人可能会用v-if将此dom重新刷新,但是还有种方式就是可以给tree绑定一个key,当点击刷新按钮更新tree的key值即可完成刷新操作

    代码如下:

    1. //1.在el-tree上绑定key值为时间戳
    2. ref="tree"
    3. :key="treeKey"
    4. :loading="tloading"
    5. :props="props"
    6. :data="treeData"
    7. :highlight-current="true"
    8. node-key="id"
    9. :check-strictly="true"
    10. show-checkbox
    11. :default-expanded-keys="showList"
    12. :render-content="drawingTreeNode"
    13. @check-change="treeCheckChange"
    14. @node-click="clickTree"
    15. />
    16. //2.在data中定义key值为时间戳
    17. data(){
    18. return{
    19. treeKey: new Date().getTime(),
    20. }
    21. }
    22. //3.在methods中定义刷新方法刷新key值即可
    23. methods:{
    24. refreshTree(){
    25. this.treeKey=+new Date()
    26. }
    27. }

     1.2、el-table

    点击修改按钮可将某一行部分字段设置为可编辑单元格。比较常见的方式就是使用一个变量动态决定是否可编辑。由于是树形表格的缘故,此时使用$set也会造成非响应式的问题

    因为树形表格的缘故,我们此时使用给表格行绑定key属性来解决

    如下图

     

     代码如下:

    1. // 1.给需要响应式的el-table-cloumn绑定key值
    2. "rowKey" prop="useSeries" :label="'适用车型'" min-width="120">
    3. <template slot-scope="scope">
    4. <span v-if="scope.row.flag">
    5. <el-select v-model="scope.row.useSeries " clearable placeholder="'">
    6. <el-option
    7. v-for="item in modelList"
    8. :key="item.ID_"
    9. :label="item.NUMBER_"
    10. :value="item.NUMBER_"
    11. />
    12. el-select>
    13. span>
    14. <span v-else>
    15. {{ scope.row.useSeries }}
    16. span>
    17. template>
    18. // 2.data中定义rowKey
    19. data() {
    20. rowKey: +new Date(),
    21. }
    22. // 3.修改方法刷新即可,因为我这里调用了接口查询对应可修改下拉数据所以写在接口返回之后
    23. methods:{
    24. queryRowPoint(id, row) {
    25. this.tableLoading = true
    26. getPoint({ stationId: id }).then(res => {
    27. this.pointObj[id] = res.resultlist || []
    28. this.rowKey = +new Date()
    29. }).finally(() => {
    30. this.tableLoading = false
    31. })
    32. },
    33. }

     还有一下应用场景使用方法差不多。当然可能不用刷新key也会很轻松解决问题,但是这可以是种思路进行拓展。因为代码都是在csdn的编辑器手写的所以版式可能不太正

  • 相关阅读:
    Go sync.WaitGroup
    ASPX与ASP URL传递值问题
    QT编程时如何开启c++11?其他IDE如何开启C++11?
    TodoList经典案例
    韩顺平-二维数组
    2022跨境电商新战场:海外社交电商发展前景分析
    Springboot毕设项目码头船只出行及配套货柜码放管理系统89t3y(java+VUE+Mybatis+Maven+Mysql)
    DC-1靶场搭建及渗透实战详细过程(DC靶场系列)
    Linux操作系统——线程概念
    Alos PALSAR 12.5米免费DEM下载教程
  • 原文地址:https://blog.csdn.net/m0_52765288/article/details/128037698