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>