Vue 内部指令笔记

181 阅读4分钟

引入vue + 初始化

<body>
	<div id='app'></div>
	
	<!-- 引入Vue -->
	<script src="https://cdn.jsdelivr.net/npm/vue"></script>
	<script>
		var app = new Vue({
			el: '#app',
			data: {
			
			}
		});
	</script>
</body>

使用插值表达式 {{}}

<div> {{message}} </div>

<script>
	var app = new Vue({
		el: '#app',
		data: {
			message: 'Hello World!'
		}
	});
</script>

v-text 指令

<div v-text="message"></div>
<script>
	var app = new Vue({
		el: '#app',
		data: {
			message: 'Hello World!'
		}
	});
</script>

v-text 使用效果与插值表达式基本相同,但插值表达式在网速不好的时候会无法及时渲染数据,v-text 则可以避免这个问题 (就算网速不好也不会出现字符串)

v-html 指令

<div v-html="message"></div>
<script>
	var app = new Vue({
		el: '#app',
		data: {
			message: '<h1>Hello World!</h1>'
		}
	});
</script>
  • v-html 使用效果与 v-text 基本相同,但 v-text 会把数据转换成字符串后渲染到页面,所以如果数据中含有标签,则无法被渲染
  • 在生产环境中动态渲染HTML是非常危险的,因为容易导致XSS攻击。所以只能在可信的内容上使用 v-html,永远不要在用户提交和可操作的网页上使用

v-for 指令

<ul>
	<li v-for='item in items'>
		{{item}}
	</li>
</ul>
<script>
	var app = new Vue({
		el: '#app',
		data: {
			items: ['数据一','数据二','数据三','数据四','数据五'],
		}
	});
</script>

v-for 放在需要循环渲染的标签上,注意位置

v-if & v-else & v-show 指令

<div v-if='isTrue'>当 isTrue 为 true 时渲染</div>
<div v-else>当上面那个 v-if 判断未通过时,显示这个</div>
<div v-show='isTrue'>当 isTrue 为 true 时显示</div>
<script>
	var app = new Vue({
		el: '#app',
		data: {
			isTrue: true,
		}
	});
</script>
  • v-ifv-else 可以搭配使用,也可以单独使用 v-if
  • v-else 不需要传参,也就是说他只对应第一次出现的 v-if,多个 v-if 以第一个为准
  • v-show 是通过 display='none' 隐藏标签,而 v-if 只有在判断通过后才会渲染标签

v-on 指令

<div v-bind:click="myClick">点击触发事件</div>
<div @click="myClick">指令简写版点击触发事件</div>
<div v-bind:keyup.enter="myEnter">点击触发事件</div>
<script>
	var app = new Vue({
		el: '#app',
		data: {
			
		},
        methods: {
            myClick: function(){
				alert('点击事件触发成功');
			},
			myEnter: function(){
				alert('enter键被触发');
			}
        }
	});
</script>
  • v-bind 绑定事件 可简写为 @
  • 触发的事件统一写在 methods 对象下
  • keyup 对于键盘上的键,可以指定某个键位的 ASCII 码触发对应事件

v-bind 指令

<img v-bind:src="imgSrc">
    
<a v-bind:href='myLink'>绑定链接地址</a>
<a :href='myLink'>缩写版绑定链接地址</a>

<div :class='className'>1.绑定 Class</div>
<div :class='{classA:isOk}'>2.绑定 Class 中的判断</div>
<div :class='[classA,classB]'>3.绑定 Class 中的数组</div>
<div :class='isOk?classA:classB'>4.绑定 Class 中的三元运算符</div>

<a v-bind:style="{ color:red , fontSize:font }">绑定 style 样式</a>
<a v-bind:style="styleObject">对象绑定 style 样式</a>
<script>
	var app = new Vue({
		el: '#app',
		data: {
            isOk: true,
			imgSrc: 'https://www.baidu.com/img/bd_logo1.png?qua=high&where=super',
            myLink: 'https://www.baidu.com',
            className: 'classA',
            classA: 'classA',
            classB: 'classB',
            red: 'red',
            font: '30px',
            styleObject: {
                color : 'blue',
                fontSize: '30px',
                fontWeight: 'bold'
            }
		}
	});
</script>
  • v-bind 是用来绑定标签属性的
  • v-bind 可以缩写

v-model 指令

<div v-text="message"></div>
<input type="text" v-model="message">
<script>
	var app = new Vue({
		el: '#app',
		data: {
			message: 'Hello World!'
		}
	});
</script>
  • v-model 功能是数据的双向绑定
  • input 上改变 messagediv 上也会随着改变,反之亦然
  • 修饰符
    • .lazy -> 懒加载,在默认情况下,v-modelinput 事件中同步输入框的值与数据 ,通过添加 lazy 转变为在 change 事件中同步
    • .number -> 输入字符串转换为数字,从头开始,遇到非数字取消转换
    • .trim -> 输入去掉首尾空格

v-pre & v-clock & v-once

<style tyupe="text/css">
	[v-cloak]{
		display: none;
	}
</style>

<div v-pre>{{message}}</div>
<div v-once>{{message}}</div>
<script>
	var app = new Vue({
		el: '#app',
		data: {
			message: 'Hello World!'
		}
	});
</script>
  • v-pre -> 直接输出源代码,就是在标签中加入 v-pre 就不会输出 vue 中的 data 值了
  • v-bloak -> 当网络较慢,网页还在加载 Vue.js ,而导致 Vue 来不及渲染,这时页面就会显示出 Vue 源代码,v-cloak 指令设置样式,这些样式会在 Vue 实例编译结束时,从绑定的 HTML 元素上被移除
  • v-once -> 在第一次 DOM 时进行渲染,渲染完成后视为静态内容,跳出以后的渲染过程。

参考文章