2-Vue2相关API

本文详细介绍了Vue2中的自定义指令、Vue.set的使用场景,以及如何通过filters进行文本过滤。还涵盖了数组操作(push、sort、$delete)、DOM更新时机的管理($nextTick)以及组件开发(全局注册和局部组件)。
摘要由CSDN通过智能技术生成

2-Vue2相关API

1.自定义指令 directive

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <p v-red="msg"></p>
    <p v-red="msg2"></p>
    <p v-red="msg3"></p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
	/*自定义指令*/
	Vue.directive("red", (node, bind) => {
		node.innerText = bind.value;
		node.style.color = "red";
		node.onclick = function () {
			alert("111");
		};
	});


	new Vue({
		el: "#app",
		data() {
			return {
				msg: "Hello",
				msg2: "Vue",
                msg3: "Pikaka"
			}
		}
	});
</script>
</body>
</html>

2.set
set-1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
  <p v-for="item in arr":key="item">{{item}}</p>
  <button @click="fn">点击切换</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
let app = new Vue({
  el: "#app",
  data(){
    return {
      arr: ["小明","小红","小白"]
    }
  },
  methods: {
      fn() {
        /*数组里面的每一项单独改变的时候,是不会触发DOM变化的*/
        //this.arr[0] = "大明"

        //使用全局set可以解决
        Vue.set(this.arr,0,"大明");
        this.$set(this.arr,1,"幼儿园扛把子");
      }
  }
});
</script>
</body>
</html>

set-2

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
  <p v-for="item in arr":key="item">{{item}}</p>
  <button @click="fn">按钮</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
let app = new Vue({
  el: "#app",
  data(){
    return {
      arr: ["小明","小红","小白"]
    }
  },
  methods: {
      fn() {
          //会触发DOM更新的情况

          //this.arr.sort(()=>-1)
          //this.arr.push("mint"); //pop shift unshift
          //this.arr = ["1","2","3"];
          this.arr = [...this.arr,"好嗨哦"];
      }
  }

});
</script>
</body>
</html>

set-3

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
  <p v-for="value,key in info":key="value">{{value}}</p>
  <button @click="fn">按钮</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
let app = new Vue({
  el: "#app",
  data(){
    return {
        info: {
        	name: "mint",
            age: 20,
            sex: "男"
        }
    }
  },
  methods: {
      fn() {
         this.info.name = "薄荷er";
      }
  }
});
</script>
</body>
</html>

set-4

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <ul>
        <li v-for="item in info">
            <b>{{item.name}}</b>
            <em>{{item.age}}</em>
            <em>{{item.sex}}</em>
        </li>
    </ul>
  <button @click="fn">按钮</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
let app = new Vue({
  el: "#app",
  data(){
    return {
        info: [
            {name: "mint",age: 20,sex: "男"},
	        {name: "weige",age: 20,sex: "女"},
	        {name: "zhiyuan",age: 19,sex: "男"},
	        {name: "xiaoxi",age: 21,sex: "女"}
        ]
    }
  },
  methods: {
      fn() {
         this.info[0].name = "薄荷er";
         this.info[0].age = 3;
         this.info[0].sex = "女";

         this.info[1].age = 18;
      }
  }
});
</script>
</body>
</html>

set-5

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <ul>
        <li v-for="item in info">
            <b>{{item.name}}</b>
            <em>{{item.age}}</em>
            <em>{{item.sex}}</em>
            <span v-for="val in item.friends">{{val}}</span>
        </li>
    </ul>

  <button @click="fn">按钮</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
let app = new Vue({
  el: "#app",
  data(){
    return {
        info: [
            {name: "mint",age: 20,sex: "男",friends:["薄荷er,皮卡,","伟哥"]},
	        {name: "伟哥",age: 20,sex: "女",friends:["神秘人x,"]},
	        {name: "志远",age: 19,sex: "男",friends: ["小哲"]},
	        {name: "小希",age: 21,sex: "女",friends: ["mint"]}
        ]
    }
  },
  methods: {
      fn() {
      	//不行
        //this.info[1].friends[1] = "薄荷er";

        //可以
        //this.info[1].friends.push("薄荷er");
        this.$set(this.info[1].friends,1,"bohe");
      }
  }
});
</script>
</body>
</html>

3.delete

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <ul>
        <li v-for="item in info">
            <b>{{item.name}}</b>
            <em>{{item.age}}</em>
            <em>{{item.sex}}</em>
            <span v-for="val in item.friends">{{val}}</span>
        </li>
    </ul>
    <button @click="fn">按钮</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
	let app = new Vue({
		el: "#app",
		data() {
			return {
				info: [
					{name: "mint", age: 20, sex: "男", friends: ["薄荷er,皮卡,", "伟哥"]},
					{name: "伟哥", age: 20, sex: "女", friends: ["神秘人x,"]},
					{name: "志远", age: 19, sex: "男", friends: ["小哲"]},
					{name: "小希", age: 21, sex: "女", friends: ["mint"]}
				]
			}
		},
		methods: {
			fn() {
				//this.info.pop();
				// this.info.splice(1,1);

				//this.$delete(this.info,1);

				// this.$delete(this.info[1],"friends");

				this.info = this.info.map(item => {
					delete item.friends;
					return item;
				});
			}
		}
	});
</script>
</body>
</html>

4-filters
filters-1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <p v-for="item in teacher" :key="item.name">
        <b>
            {{item.sex | sex}}
            {{item.name | fn}}
        </b>
    </p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
	new Vue({
		el : "#app",
		data(){
			return {
				teacher:[
					{name:"简",sex:"男"},
					{name:"罗",sex:"男"},
					{name:"毛",sex:"女"},
				]
			}
		},
		filters:{
			fn(value){
				return value+"老师";
			},
			sex(value){
				return (value==="男")?"帅气的":"漂亮的";
			}
		}
	});
</script>
</body>
</html>

filters-2

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <p v-for="item in teacher" :key="item.name">
        <b>
            {{item | fn}}
        </b>
    </p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
	new Vue({
		el: "#app",
		data() {
			return {
				teacher: [
					{name: "简老师", sex: "男"},
					{name: "罗老师", sex: "男"},
					{name: "毛老师", sex: "女"},
				]
			}
		},
		filters: {
			fn(value) {
				let str = (value.sex === "男") ? "帅气的" : "漂亮的";
				return str + value.name + "老师";
			},
		}
	});
</script>
</body>
</html>

filters-3

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <p v-for="item in teacher" :key="item.name">
        <b>
            {{item.name}}
        </b>
        <em>{{item.price | add}}</em>
    </p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
	new Vue({
		el: "#app",
		data() {
			return {
				teacher: [
					{name: "简老师", price: 666},
					{name: "罗老师",price: 9999999},
					{name: "毛老师", price:888},
				]
			}
		},
		filters: {
			add(value) {
				value = (value+"").split("").reverse().join("");
				return "¥"+value.match(/\d{1,3}/g).join(",").split("").reverse().join("");
			}
		}
	});
</script>
</body>
</html>

5-nextTick

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<div id="app">
  <p>{{msg}}</p>
  <button @click="change">按钮1</button>
  <button @click="change2">按钮2</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
  new Vue({
    el: "#app",
    data() {
      return {
        msg : "Hello Vue!"
      }
    },
    methods: {
      change() {
        //如果我们需要在DOM更新之后做一些后续处理的话,写前写后,都不会影响执行顺序
        //在未完全掌握箭头函数的情况下,这里尽量不要用箭头函数,this指向不一定指向这里
        //Vue.nextTick()
        this.$nextTick(function(){
          console.log('DOM更新了!');
        });
        this.msg = "Hello World!";
      },
      change2() {
        this.msg = "Hello1";
      }
    }
  });
</script>
</body>
</html>

5-component
component-1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <a-mint></a-mint>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    //全局组件
    Vue.component(
    	//组件的名字,在html中,就使用这个标签来渲染内容
        //如果标签中有 - 驼峰命名法
        "aMint",

        //一些选项参数
        {
            //对应生成的DOM结构
            /*
            结构中只能有一个根标签
            * */
            template: `<div>
                            <p>这是 aMint组件来写的 p标签鸭~</p>
                        </div>`
        }
    );

	new Vue({
		el: '#app',
		data: {
			message: 'Hello Vue!'
		},
		methods: {}
	});

</script>
</body>
</html>

component-2

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <a-mint></a-mint>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
	//全局组件
	Vue.component(
		//组件的名字,在html中,就使用这个标签来渲染内容
		//如果标签中有 - 驼峰命名法
		"aMint",

		//一些选项参数
		{
			//对应生成的DOM结构
			/*
            结构中只能有一个根标签
            * */
			template: `<div>
                            <p>{{num}}</p>
                            <button @click="add">按钮</button>
                        </div>`,

			//这里定义组件的数据
			data() {
				return {
					num: 0
				}
			},
			methods: {
				add() {
					this.num++;
				}
			}
		}
	);

	//根组件 ROOT
	new Vue({
		el: '#app',
		data: {
			msg: "Hello Vue!"
		},
	});

</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值