Ashun's 技術駅 Ashun's 技術駅
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • Vue
  • 现代web布局
  • React
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 技术资源
  • 第一阶段

    • HTML
  • 第二阶段

    • JavaScript
  • 第三阶段

    • Vue
  • 第四阶段

    • 实战项目
  • 每周测试

    • 每周
  • 其他

    • Vue引入UI框架
    • Web前端面试
    • Vue3-resource
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 福利资源
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Ashun

前端界的小学生
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • Vue
  • 现代web布局
  • React
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 技术资源
  • 第一阶段

    • HTML
  • 第二阶段

    • JavaScript
  • 第三阶段

    • Vue
  • 第四阶段

    • 实战项目
  • 每周测试

    • 每周
  • 其他

    • Vue引入UI框架
    • Web前端面试
    • Vue3-resource
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 福利资源
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 01mvvm和mvc
  • 02安装和使用
  • 03模版语法
  • 04生命周期
  • 05指令
  • 06方法-计算属性-监听器
  • 07class和style绑定
  • 08条件渲染
  • 09列表渲染
    • 数组的更新检测
    • 对象更新检测
    • 列表过滤
      • 1、计算属性过滤器
      • 2、函数过滤器
    • 练习
  • 10事件处理
  • 11表单输入绑定
  • 12组件
  • 13组件之间传递数据
  • 14props验证
  • 15插槽
  • 16动态组件
  • 17处理边界情况
  • 18脚手架
  • 19Vuex
  • 20VueRouter
  • 21自定义指令
  • 22渲染函数
  • 23插件
  • 24VueConfig
  • 《Vue》
xugaoyi
2022-02-14
目录

09列表渲染

# 列表渲染

跟条件渲染一样,列表渲染也会尽可能的复用元素,所以也是使用key来避免复用。

<div v-for="(item,idx) of arr" :key="item.id">{{item.name}}</div>

new Vue({
  el: "#app",
  data: {
    arr:[{id:"9527",name:"小明"},{id:"7788",name:"小红"}]
  }
});
1
2
3
4
5
6
7
8

%accordion% 练习🚀 %accordion%

<div id="app">
    <div v-for="(item,idx) of arr" :key="idx">{{item}}</div>
</div>

<script>
    new Vue({
        el: "#app",
        data: {
            // arr: [1, 2, 3],
            arr: ["我是div1", "我是div2", "我是div3"],
        }
    })
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13

%/accordion%

# 数组的更新检测

因为vue2内部使用了Object.definePrototype方法的原因,直接控制数组的成员来修改,是无法让标签同步渲染的。

<button @click="change">按钮</button>
<div v-for="item of arr">{{item}}</div>

new Vue({
  el: "#app",
  data: {
    arr:[1,2,3,4,5]
  },
  methods: {
    change(){
			this.arr[5] = "x"//无效
			
			this.arr.push("x")//有效,需要使用数组变异方法。

      this.$set(this.arr,5,"x")//有效,$set是Vue内部提供的更改数组和对象的方法。
			//this.$set(修改哪个数据,修改第几个成员,修改成什么)
    }
  },
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

%accordion% 练习🚀 %accordion%

<div id="app">
    <button @click="add">按钮</button>
    <div v-for="(item,idx) of arr" :key="idx">{{item}}</div>
</div>

<script>
    new Vue({
        el: "#app",
        data: {
            // arr: [1, 2, 3], //也给这样哦
            arr: ["我是div1", "我是div2", "我是div3"],
        },
        //添加方法
        methods: {
            add() {//点击方法
                this.$set(this.arr, 3, "点击我才能出现哦")
            }
        },
    })
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

%/accordion%

# 对象更新检测

与数组一样,对象也是无法直接更新同步的。

<button @click="change">按钮</button>
<div v-for="value of obj">{{value}}</div>

new Vue({
  el: "#app",
  data: {
    obj:{name:"小明",age:18,sex:"男"}
  },
  methods: {
    change(){
      this.obj.hobby = "打游戏"//无效

			this.$set(this.obj,"hobby","打游戏")//有效

			this.obj = Object.assign({},this.obj,{//可以同时修改多个属性
        hobby:"打游戏",
        address:"黄村"
      })
    }
  },
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 列表过滤

# 1、计算属性过滤器

<div v-for="item of filterArr">{{item}}</div>

new Vue({
  el: "#app",
  data: {
    arr:[1,2,3,4,5]
  },
  computed:{
    filterArr(){//计算属性的过滤器
       return this.arr.filter((item)=>{
        return item % 2 === 0
      })
    }
   }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 2、函数过滤器

<div v-for="item of filterArr(arr)">{{item}}</div>

new Vue({
  el: "#app",
  data: {
    arr:[1,2,3,4,5]
  },
  methods: {
    filterArr(arr){
      return arr.filter((item)=>{
        return item % 2 === 0
      })
    }
  },
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 练习

数组的每个成员进行增、删、改

<button @click="change">按钮</button>
<div v-for="item of arr">{{item}}</div>

new Vue({
  el: "#app",
  data: {
    arr:[{name:"小明",age:18},{name:"小红",age:19},{name:"小黄",age:20}]
  },
  methods: {
    change(){
      this.arr.map((item)=>{//增
        this.$set(item,"sex","男")
      })

      this.arr.map((item)=>{//改
        this.$set(item,"age",16)
      })

      this.arr.map((item)=>{//删
        this.$delete(item,"age")
      })
    }
  },
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

%accordion% 错误写法🚀 %accordion%

<div id="app">
    <button @click="add">按钮</button>
    {{obj}}
</div>

<script>
    new Vue({
        el: "#app",
        data: {
            obj: { name: "张三", age: 18 }
        },
        //添加方法
        methods: {
            add() {//点击方法
                //错误写法
                this.obj.ag = 18
                console.log(this.obj);
            },
        },
    });
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

%/accordion%

%accordion% 修改单个属性😀 %accordion%

<div id="app">
    <button @click="add">按钮</button>
    {{obj}}
</div>

<script>
    new Vue({
        el: "#app",
        data: {
            obj: { name: "张三", age: 18 }
        },
        //添加方法
        methods: {
            add() {//点击方法
                //修改单个属性
                this.$set(this.obj, "age", 666)
                this.$set(this.obj, "sex", "男")
        },
    });
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

%/accordion%

%accordion% 修改多个属性😂 %accordion%

<div id="app">
    <button @click="add">按钮</button>
    {{obj}}
</div>

<script>
    new Vue({
        el: "#app",
        data: {
            obj: { name: "张三", age: 18 }
        },
        //添加方法
        methods: {
            add() {//点击方法
                //修改多个属性
                this.obj = Object.assign({}, this.obj, {
                    age: 666,
                    sex: "男",
                });
            },
        },
    });
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

%/accordion%

%accordion% 删除属性🤣 %accordion%

<div id="app">
    <button @click="add">按钮</button>
    {{obj}}
</div>

<script>
    new Vue({
        el: "#app",
        data: {
            obj: { name: "张三", age: 18 }
        },
        //添加方法
        methods: {
            add() {//点击方法
                //删除属性
                this.$delete(this.obj, "age")
            },
        },
    });
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

集成

<div id="app">
    <button @click="add">按钮</button>
    {{obj}}
</div>

<script>
    new Vue({
        el: "#app",
        data: {
            // arr: [1, 2, 3],
            obj: { name: "张三", age: 18 }
        },
        //添加方法
        methods: {
            add() {//点击方法
                //错误写法
                // this.obj.ag = 18
                // console.log(this.obj);

                //修改单个属性
                // this.$set(this.obj, "age", 666)
                // this.$set(this.obj, "sex", "男")

                //修改多个属性
                this.obj = Object.assign({}, this.obj, {
                    age: 66,
                    sex: "男",
                });

                //删除属性
                this.$delete(this.obj, "age")
                // this.$set(this.arr, 3, "点击我才能出现哦")
            },
        },
    });
</script>
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
编辑 (opens new window)
上次更新: 2023/08/06, 00:38:41
08条件渲染
10事件处理

← 08条件渲染 10事件处理→

最近更新
01
课件-react路由-V6
01-22
02
课件-国际化
01-22
03
课件-redux-toolkit
01-22
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式