Vue学习笔记一

Vue基础语法

模板语法

插值语法

先创建一个id为app的容器

<div id="app">
	<div>{{msg}}</div>
</div>

让后将容器id与数据进行绑定

new Vue({
	el: '#app',
	data: {
		msg: 'Hello World'
	}
});

指令语法

1. 什么是指令?
  • 什么是自定义属性
  • 指令的本质就是自定义属性
  • 指令的格式:以v-开始(比如:v-cloak)
2. v-cloak指令的用法
  • 插值表达式存在的问题:“闪动”

  • 如何解决该问题:使用v-cloak指令

  • 解决该问题的原理:先隐藏,替换好值之后再显示最终的值

① 首先提供css样式

[v-cloak] {
	display: none;
}

② 让后在插值表达式所在的标签中添加v-cloak指令

<div id="app">
	<div v-cloak>{{msg}}</div>
</div>
3. 数据绑定指令的用法

v-text 填充纯文本

① 相比插值表达式更加简洁

html代码如下:

<div id="app">
    <div v-cloak>{{msg}}</div>
	<div v-text="msg"></div>
</div>

js代码如下:

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

v-html 填充HTML片段

① 存在安全问题

② 本网站内部数据可以使用,来自第三方的数据不可以用

html代码如下:

<div id="app">
	<div v-cloak>{{msg}}</div>
	<div v-text="msg"></div>
	<div v-text="msg1"></div>
	<div v-html="msg1"></div>
</div>

js代码如下:

new Vue({
	el: '#app',
	data: {
		msg: 'Hello World!',
		msg1: '<h1>Hello</h1>'
	}
});

v-pre 填充原始信息

① 显示原始信息,跳过编译过程(分析编译过程)

html代码如下:

<div id="app">
	<div v-cloak>{{msg}}</div>
	<div v-text="msg"></div>
	<div v-text="msg1"></div>
	<div v-html="msg1"></div>
	<div v-pre>{{msg}}</div>
</div>

js代码如下:

new Vue({
	el: '#app',
	data: {
		msg: 'Hello World!',
		msg1: '<h1>Hello</h1>'
	}
});
4. 数据响应式

如何理解响应式

① html5中的响应式(屏幕尺寸的变化导致样式的变化)

② 数据的响应式(数据的变化导致页面内容的变化)

什么是数据绑定

① 数据绑定:将数据填充到标签中

v-once 只编译一次

① 显示内容之后不再具有响应式功能

html代码如下:

<div id="app">
	<div>{{msg}}</div>
    <div v-once>{{info}}</div>
</div>

js代码如下:

new Vue({
	el: '#app',
	data: {
		msg: 'Hello World!',
		info: '不再具有响应功能'
	}
});

单向数据绑定

1. 什么是单向数据绑定

在这里插入图片描述

2. 单向数据绑定分析

v-bind指令用法

<input type='text' v-bind:value='msg' />

可以简写成

```

html代码如下:

<div id="app">
    <div>{{msg}}</div>
    <input type="text" v-bind:value="msg" />
    <br />
    <input type="text" :value="msg" />
</div>

js代码如下:

const vm = new Vue({
	el: '#app',
	data: {
		msg: 'Hello World!'
	}
});

双向数据绑定

1. 什么是双向数据绑定?

在这里插入图片描述

2. 双向数据绑定分析

v-model指令用法

<input type='text' v-model:value='msg' />

可以简写成

<input type='text' v-model='msg' />

html代码如下:

<div id="app">
	<div>{{msg}}</div>
	<div>
        <input type='text' v-model:value='msg' />
		<input type="text" v-model="msg" />
	</div>
</div>

js代码如下:

const vm = new Vue({
	el: '#app',
	data: {
		msg: 'Hello World!'
	}
});
3. MVVM设计思想

① M(model)

② V(view)

③ VM(View-Model)
在这里插入图片描述

事件绑定

1. Vue如何处理事件?
  • v-on指令用法

    <input type='button' v-on:click='num++' />

  • v-on简写形式

    <input type='button' @click='num++' />

2. 事件函数的调用方式
  • 直接绑定函数名称

    <button v-on:click='say'>Hello</button>

  • 调用函数

    <button v-on:click='say()'>Say Hi</button>

html代码如下:

<div id="app">
    <div>{{num}}</div>
    <input type="button" v-on:click="num++" value="单击按钮" />
    <input type="button" @click="num++" value="单击按钮" />
    <input type="button" v-on:click="handle" value="单击按钮" />
    <input type="button" @click="handle()" value="单击按钮" />
</div>

js代码如下:

const vm = new Vue({
	el: '#app',
	data: {
		num: 0
	},
	methods: {
		handle: function() {
			this.num++;
		}
	}
});
3. 事件函数参数传递
  • 普通参数和事件对象

<button v-on:click='say("hi", $event)'>Say Hi</button>

html代码如下:

<div id="app">
	<div>{{num}}</div>
	<button v-on:click="handle1">单击1</button>
	<button v-on:click="handle2(123, $event, 456)">单击2</button>
</div>

js代码如下:

const vm = new Vue({
	el: '#app',
	data: {
		num: 0
	},
	methods: {
		handle1: function(event) {
            console.log(event);
			this.num++;
		},
        handle2: function(num1, event, num2) {
            console.log(num1);
            console.log(event);
            console.log(num2);
			this.num++;
		}
	}
});
4. 事件修饰符
  • stop阻止冒泡

<a v-on:click.stop="handle">跳转</a>

原生JS代码阻止冒泡

html代码如下:

<div id='app'>
    <div>{{num}}</div>
	<div v-on:click="handle">
		<button v-on:click="handle1">点击</button>
	</div>
</div>

js代码如下:

const vm = new Vue({
	el: '#app',
	data: {
		num: 0
	},
	methods: {
			handle: function () {
			this.num++;
		},
		handle1: function (event) {
			event.stopPropagation();
			console.log('点击');
		}
	}
});

stop阻止冒泡

html代码如下:

<div id='app'>
    <div>{{num}}</div>
	<div v-on:click="handle">
		<button v-on:click.stop="handle1">点击</button>
	</div>
</div>

js代码如下:

const vm = new Vue({
	el: '#app',
	data: {
		num: 0
	},
	methods: {
			handle: function () {
			this.num++;
		},
		handle1: function (event) {
			// event.stopPropagation();
			console.log('点击');
		}
	}
});
  • prevet阻止默认行为

<a v-on:click.prevent="handle">跳转</a>

原生JS代码阻止默认行为

html代码如下:

<div id='app'>
    <div>{{num}}</div>
	<a v-on:click="handle" href="http://www.baidu.com">百度一下</a>
</div>

js代码如下:

const vm = new Vue({
	el: '#app',
		data: {
		num: 0
	},
	methods: {
		handle: function (event) {
			event.preventDefault();
		}
	}
}

prevent阻止默认行为

html代码如下:

<div id='app'>
    <div>{{num}}</div>
	<a v-on:click.prevent="handle" href="http://www.baidu.com">百度一下</a>
</div>

js代码如下:

const vm = new Vue({
	el: '#app',
		data: {
		num: 0
	},
	methods: {
		handle: function (event) {
			// event.preventDefault();
		}
	}
}
5.按键修饰符
  • enter回车键

    <input v-on:keyup.enter='submit' />

  • delete删除键

    <input v-on:keyup.delete='handle' />

html代码如下:

<div id='app'>
	<form action="">
		<div>
			用户名:<input type="text" v-model="uname" v-on:keyup.delete="clearContent" />
		</div>
		<div>
			密码:<input type="text" v-model="pwd" v-on:keyup.enter="handleSubmint" />
		</div>
		<div>
			<input type="button" v-on:click="handleSubmint" value="提交">
		</div>
	</form>
</div>

js代码如下:

const vm = new Vue({
	el: '#app',
	data: {
		uname: '',
		pwd: ''
	},
	methods: {
		clearContent: function () {
			this.uname = ''
		},
		handleSubmint: function (event) {
			console.log(this.uname + '&' + this.pwd);
		}
    }
}
6. 自定义按键修饰符
  • 全局config.keyCodes对象

    Vue.config.keyCodes.f1 = 70

html代码如下:

<div id='app'>
    <input type="text" v-on:keyup.aaa="handle">
	<input type="text" v-on:keyup.f1="handle">
</div>

js代码如下:

Vue.config.keyCodes.aaa = 65;
Vue.config.keyCodes.f1 = 70
const vm = new Vue({
    el: '#app',
    data: {
        info: ''
    },
    methods: {
        handle: function(event) {
            console.log(event.keyCode);
        }
    }
});

属性绑定

1. Vue如何动态处理属性?
  • v-bind指令用法

    <a v-bind:href='url'>跳转</a>

  • 缩写形式

    <a :href='url'>跳转</a>

html代码如下:

<div id="app">
    <a v-bind:href="url">百度</a>
    <a :href="url">百度</a>
</div>

js代码如下:

const vm = new Vue({
	el: '#app',
	data: {
		url: 'http://www.baidu.com'
	},
	methods: {
	}
	});
2. v-model的底层实现原理分析

<input v-bind:value="msg" v-on:input="msg=$event.target.value" />

html代码如下:

<div id="app">
    <input v-bind:value="msg" v-on:input="msg=$event.target.value" /><br />
    <input type="text" @input="msg=$event.target.value" /><br />
    <input type="text" :value="msg" /><br />
    <input type="text" v-model="msg" />
</div>

js代码如下:

const vm = new Vue({
	el: '#app',
	data: {
		msg: '123'
	},
	methods: {
	}
});

样式绑定

1. class样式处理
  • 对象语法

    <div v-bind:class="{active: isActive}"><div>

css代码如下:

.active {
	border: 1px solid black;
	width: 100px;
	height: 100px;
}

html代码如下:

<div id="app">
	<div :class="{active : isActive}"></div>
	<button @click="handle">切换</button>
</div>

js代码如下:

const vm = new Vue({
	el: '#app',
	data: {
		isActive: true
	},
	methods: {
		handle: function () {
			this.isActive = !this.isActive;
		}
	}
});
  • 数组语法

    <div v-bind:class="[activeClass, errorClass]"></div>

css代码如下:

.active {
	border: 1px solid black;
	width: 100px;
	height: 100px;
}
.error {
	background-color: orange;
}

html代码如下:

<div id="app">
    <div v-bind:class="[activeClass, errorClass]">样式绑定</div>
    <div v-bind:class="[activeClass, errorClass]">样式绑定</div>
    <button @click="handle">切换</button>
</div>

js代码如下:

const vm = new Vue({
	el: '#app',
	data: {
		activeClass: 'active',
		errorClass: 'error'
	},
	methods: {
		handle: function () {
		this.activeClass = '';
		}
	}
});

样式绑定相关语法细节:

  1. 对象绑定和数组绑定可以结合使用

    css代码如下:

    .active {
    	border: 1px solid black;
    	width: 100px;
    	height: 100px;
    }
    .error {
    	background-color: orange;
    }
    .test {
    	color: blue;
    }
    

    html代码如下:

    <div id="app">
        <div :class="[activeClass, errorClass, {test : isTest}]">样式绑定</div>
        <button @click="handle">切换</button>
    </div>
    

    js代码如下:

    const vm = new Vue({
    	el: '#app',
    	data: {
    		activeClass: 'active',
    		errorClass: 'error',
    		isTest: true
    	},
    	methods: {
    		handle: function () {
    			this.activeClass = '';
    			// this.errorClass = '';
    			this.isTest = !this.isTest;
    		}
    	}
    });
    
  2. class绑定的值可以简化操作

    css代码如下:

    .active {
    	border: 1px solid black;
    	width: 100px;
    	height: 100px;
    }
    .error {
    	background-color: orange;
    }
    .test {
    	color: blue;
    }
    

    html代码如下:

    <div id="app">
        <div :class="{active : isActive, error : isError}">样式绑定</div>
        <div :class="objClass">样式绑定</div>
        <button @click="handle">切换</button>
    </div>
    

    js代码如下:

    const vm = new Vue({
    	el: '#app',
    	data: {
    		isActive: true,
    		isError: true,
    		objClass: {
    			active: true,
    			error: true
            }
    	},
    	methods: {
    		handle: function () {
    			// this.objClass.active = !this.objClass.active;
    			this.objClass.error = !this.objClass.error;
    		}
    	}
    });
    

    css代码如下:

    .active {
    	border: 1px solid black;
    	width: 100px;
    	height: 100px;
    }
    .error {
    	background-color: orange;
    }
    .test {
    	color: blue;
    }
    

    html代码如下:

    <div id="app">
        <div :class="arrClasses">样式绑定</div>
        <button @click="handle">切换</button>
    </div>
    

    js代码如下:

    const vm = new Vue({
    	el: '#app',
    	data: {
    		arrClasses: ['active', 'error']
    	},
    	methods: {
    		handle: function () {
    			this.arrClasses = '';
    		}
    	}
    });
    
2. style样式处理
  1. 对象语法

    <div v-bind:style="{color: activeColor, fontSize: fontSize}"></div>

    html代码如下:

    <div id="app">
        <div :style="{border: borderStyle, width: widthStyle, height: heightStyle}">样式绑定</div>
    </div>
    

    js代码如下:

    const vm = new Vue({
        el: '#app',
        data: {
        	borderStyle: '1px solid blue',
        	widthStyle: '100px',
        	heightStyle: '100px'
        },
        methods: {
            
        }
    });
    
    1. 数组语法

      <div v-bind:style="[baseStyles, overridingStyles]"></div>

    html代码如下:

    <div id="app">
        <div :style="[baseStyles, overridingStyles]">样式绑定</div>
    </div>
    

    js代码如下:

    const vm = new Vue({
        el: '#app',
        data: {
        	baseStyles: {
    			border: '1px solid blue',
    			width: '100px',
    		},
    		overridingStyles: {
    			height: '100px'
    		},
        methods: {
            
        }
    });
    

分支循环结构

1. 分支结构
  • v-if

  • v-else

  • v-else-if

html代码如下:

<div id="app">
    <div v-if="score >= 90">西游记1</div>
    <div v-else-if="score > 80">西游记2</div>
    <div v-else>西游记3</div>
</div>

js代码如下:

const vm = new Vue({
	el: '#app',
	data: {
		score: 88
	}
})
  • v-show

html代码如下:

<div id="app">
    <div>良好</div>
    <div v-show="ok">测试 v-show</div>
    <div style="display: none;">测试 v-show</div>
</div>

js代码如下:

const vm = new Vue({
	el: '#app',
	data: {
		ok: false
	}
});
2. v-if与v-show的区别
  • v-if控制元素是否渲染到页面 判断条件为false 是不会渲染的
  • v-show控制元素是否显示 控制display属性
3. 循环结构
  • v-for遍历数组

    <li v-for='item in list'>{{item}}</li>

    <li v-for='(item, index) in list'>{{item}} + '----' + {{index}}</li>

    html代码如下:

    <div id="app">
        <ul>
            <li v-for="item in list">{{item}}</li>
    		<li v-for="(item, index) in list">{{item}} + '----' + {{index}}</li>
        </ul>
    </div>
    

    js代码如下:

    const vm = new Vue({
    	el: '#app',
    	data: {
    		list: ['香蕉', '苹果', '菠萝']
    	}
    });
    
  • key的作用:帮助Vue区分不同的元素,从而提高性能

    <li :key='item.id' v-for= ''(item, index) in list'>{{item}} + '---' + {{index}}</li>

    html代码如下:

    <div id="app">
        <ul>
            <li :key="item.id" v-for="(item, index) in list">{{item}} + '----' + {{index}}</li>
        </ul>
    </div>
    

    js代码如下:

    const vm = new Vue({
    	el: '#app',
    	data: {
    		list: [{
    			id: 1,
    			name: '香蕉'
    		}, {
    			id: 2,
    			name: '苹果'
    		}, {
    			id: 3,
    			name: '菠萝'
    		},]
    	}
    });
    

    综合案例如下:

    html代码如下:

    <div id="app">
        <div>水果列表</div>
        <ul>
            <li v-for="item in fruits">{{item}}</li>
        </ul>
        <div>姓名列表</div>
        <ul>
            <li v-for="(item, index) in names">{{item}} + '----' + {{index}}</li>
        </ul>
        <div>学生列表</div>
        <ul>
            <li :key="item.id" v-for="item in students">{{item.id}} + '----' + {{item.name}}</li>
        </ul>
    </div>
    

    js代码如下:

    const vm = new Vue({
    	el: '#app',
    	data: {
    		fruits: ['apple', 'orange', 'banana'],
    		names: ['toom', 'lily', 'mary'],
    		students: [{
    			id: 1,
    			name: '张三',
    		}, {
    			id: 2,
    			name: '李四'
    		}, {
    			id: 3,
    			name: '王五'
    		}]
    	}
    });
    
  • v-for遍历对象

    <div v-for='(value, key, index) in object'></div>

    html代码如下:

    <div id="app">
        <div v-for="(value, key, index) in object">{{value + '----' + key+ '----' + index}}</div>
        <div v-for="(value, key, index) in object">{{value}} + '----' + {{key}}+ '----' + {{index}}</div>
    </div>
    

    js代码如下:

    const vm = new Vue({
    	el: '#app',
    	data: {
    		object: {
    			id: 100,
    			name: '神里',
    			age: 18
    		}
    	}
    });
    
  • v-if和v-for结合使用

    <div v-if='value==12' v-for=’(value, key, index) in object'></div>

    html代码如下:

    <div id="app">
            <div v-if="value==18" v-for="(value, key, index) in stu">{{value + '----' + key + '----' + index}}</div>
            <div v-if="value==18" v-for="(value, key, index) in stu">{{value}} + '----' + {{key}} + '----' + {{index}}</div>
        </div>
    

    js代码如下:

    const vm = new Vue({
    	el: '#app',
    	data: {
    	stu: {
    		id: 1,
    		name: '张三',
    		age: 18
    	}
    });
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值