每天忙碌的日子,也不要忘记了好好生活 🏠

vuePress-theme-reco happylay 🐑    2020 - 2021
每天忙碌的日子,也不要忘记了好好生活 🏠 每天忙碌的日子,也不要忘记了好好生活 🏠

Choose mode

  • dark
  • auto
  • light
主页
分类
  • 手册
  • 前端
  • 后端
  • 工作
  • 相册
  • 文档
标签
时间轴
文档
  • 轨迹
个人空间
  • 哔哩哔哩
  • 编辑博客
工具集
  • 后端工具

    • 在线json解析
    • yml格式转换
    • websocket测试
    • 时间戳转换
    • cron表达式
    • linux程序包
    • 大小写转换
    • toml格式转换
  • 后端框架

    • Spring
    • GoFrame
  • 前端工具

    • Vant移动端组件库
    • Element桌面端组件库
    • uni-app移动端框架
    • uview移动端框架
    • colorui2.0文档
    • Figma
    • Codepen
    • Dribbble
    • Iconfont阿里矢量图库
    • IconPark图标库
    • Icomoon
    • Remixicon
    • favicon图标制作
  • 开发环境

    • windows包管理器-baulk
    • windows包管理器-scoop
    • windows原版镜像
    • nexus3仓库
  • 微服务

    • 版本兼容关系
    • k8s在线配置
    • k8s接口文档
GitHub
author-avatar

happylay 🐑

34

文章

24

标签

主页
分类
  • 手册
  • 前端
  • 后端
  • 工作
  • 相册
  • 文档
标签
时间轴
文档
  • 轨迹
个人空间
  • 哔哩哔哩
  • 编辑博客
工具集
  • 后端工具

    • 在线json解析
    • yml格式转换
    • websocket测试
    • 时间戳转换
    • cron表达式
    • linux程序包
    • 大小写转换
    • toml格式转换
  • 后端框架

    • Spring
    • GoFrame
  • 前端工具

    • Vant移动端组件库
    • Element桌面端组件库
    • uni-app移动端框架
    • uview移动端框架
    • colorui2.0文档
    • Figma
    • Codepen
    • Dribbble
    • Iconfont阿里矢量图库
    • IconPark图标库
    • Icomoon
    • Remixicon
    • favicon图标制作
  • 开发环境

    • windows包管理器-baulk
    • windows包管理器-scoop
    • windows原版镜像
    • nexus3仓库
  • 微服务

    • 版本兼容关系
    • k8s在线配置
    • k8s接口文档
GitHub
  • 2020

    • api 接口服务
    • dom渲染总结
    • eslint代码规范
    • promise 异步总结
    • scss总结
    • typescript 总结
    • vue2 常用配置
    • vue2总结
    • vue3总结
    • vuex总结
    • 响应式布局
    • 基础样式
    • 常用js写法
    • 常用npm类库
    • 常用样式
    • 样式卡片

dom渲染总结

vuePress-theme-reco happylay 🐑    2020 - 2021

dom渲染总结

happylay 🐑 2020-12-29 代码片段dom

摘要: dom 渲染总结 时间: 2020-12-29


# vue dom 渲染

对对象中属性操作会被渲染,对集合操作不会被渲染,

可以使用 Vue.set(target, key, value) 或者 this.$set(target, key, value)方法修改数据

  • target:要更改的数据源(可以是对象或者数组)
  • key:要更改的具体数据
  • value:重新赋的值
<!DOCTYPE html>
<html>
  <head lang="en">
    <meta charset="UTF-8" />
    <title></title>
  </head>

  <body>
    <div id="app2">
      <p v-for="item in items" :key="item.id">
        {{item.message}}
      </p>
      <p v-for="(item,index) in student.list" :key="index">
        {{item}}
      </p>
      <pre>{{items}}</pre>
      <pre>{{student}}</pre>
      <button class="btn" @click="btn2Click()">动态赋值</button><br />
      <button class="btn" @click="btn2errorClick()">
        动态赋值(不会立即渲染)</button
      ><br />
      <button class="btn" @click="btn2pushClick()">动态赋值(push)</button
      ><br />
      <button class="btn" @click="btn2deleteClick()">动态赋值(splice)</button
      ><br />
      <button class="btn" @click="btn3Click()">为data新增属性</button>
    </div>
    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script
      src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"
      type="text/javascript"
    ></script>
    <script>
      var vm2 = new Vue({
        el: "#app2",
        data: {
          items: [
            { message: "Test one", id: "1" },
            { message: "Test two", id: "2" },
            { message: "Test three", id: "3" },
          ],
          student: {
            id: 1,
            name: "李华",
            list: [
              {
                id: 1,
                name: "张三",
              },
            ],
          },
        },
        methods: {
          // Vue.set(target, key, value)
          // target:要更改的数据源(可以是对象或者数组)
          // key:要更改的具体数据
          // value :重新赋的值
          btn2Click: function() {
            Vue.set(this.items, 0, { message: "Change Test", id: "10" });
            //this.$set(this.items, 0, { message: "Change Test", id: '10' })
          },
          // 数据不会立即渲染
          btn2errorClick: function() {
            const data = [
              { message: "数据", id: "10" },
              { message: "数据", id: "20" },
              { message: "数据", id: "30" },
            ];
            // 会渲染
            this.items = data;

            // 不会渲染
            this.items[0] = { message: "Change Test", id: "10" };

            // 备注:只要有一个数据渲染就会被同时渲染

            // 会渲染
            //this.student.name = '大秦赋'
            // 会渲染
            //this.student.list[0].name = '大秦赋'
            // 会渲染
            //this.student.list[0].name = { name: "大秦赋", id: '2' }
            // 不会渲染
            this.student.list[0] = { name: "大秦赋", id: "2" };
          },
          // 数据会被渲染
          btn2pushClick: function() {
            const l1 = { message: "Change Test", id: "10" };
            this.items.push(l1);
          },
          btn2deleteClick: function() {
            // delete 操作符会从某个对象上移除指定属性。成功删除的时候会返回 true,否则返回 false
            // delete this.items[0]

            // 获取删除下标序列
            const index = this.items.findIndex((x) => x.id === "3");
            if (index != -1) {
              // 删除下标元素
              this.items.splice(index, 1);
            }
          },
          // 新增对象
          btn3Click: function() {
            var itemLen = this.items.length;
            Vue.set(this.items, itemLen, {
              message: "Test add attr",
              id: itemLen,
            });
          },
        },
      });
    </script>
  </body>
  <!-- https://www.jianshu.com/p/e6e8c45e7fd6 -->
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
编辑文档
最后一次更新: 2021/2/2 下午12:34:17
欢迎来到小屋。
看板娘