前端基础之内置指令与自定义指令

v-text 指令

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Document</title>

<script type="text/javascript" src="../js/vue.js"></script> <!-- 引入Vue.js -->

</head>

<body>

<div id="root">

<div>你好,{{name}}</div>

<div v-text="name">你好,</div>

<div >{{str}}</div>

</div>

<script type="text/javascript">

new Vue({

el:'#root',

data:{

name:'尚硅谷',

str:'<h3>你好</h3>'

}

})

</script>

</body>

</html>

可以在标签内使用v-text来代替{{}}指令

并且v-text是将内容直接作为字符串来进行解析的

V-html

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Document</title>

<script type="text/javascript" src="../js/vue.js"></script> <!-- 引入Vue.js -->

</head>

<body>

<div id="root">

<div>你好,{{name}}</div>

<div v-html="str">{{str}}</div>

</div>

<script type="text/javascript">

new Vue({

el:'#root',

data:{

name:'尚硅谷',

str:'<h3>你好</h3>',

}

})

</script>

</body>

</html>

v-html会将输入的包含html结构的内容进行解析,v-html存在安全问题,容易出现xss攻击

v-once 指令

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Document</title>

<script type="text/javascript" src="../js/vue.js"></script> <!-- 引入Vue.js -->

</head>

<body>

<div id="root">

<h2 v-once>初始化n时值为:{{n}}</h2>

<h2>当前的n值为:{{n}}</h2>

<button @click="n++">点我n++</button>

</div>

<script type="text/javascript">

new Vue({

el:'#root',

data:{

name:'尚硅谷',

n:1

}

})

</script>

</body>

</html>

v-once指令在节点初次动态渲染后,就视为静态内容了,之后不参与更新

V-pre

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Document</title>

<script type="text/javascript" src="../js/vue.js"></script> <!-- 引入Vue.js -->

</head>

<body>

<div id="root">

<h2 v-pre>Vue其实很简单</h2>

<h2 v-pre>当前的n值为:{{n}}</h2>

<button @click="n++">点我n++</button>

</div>

<script type="text/javascript">

new Vue({

el:'#root',

data:{

name:'尚硅谷',

n:1

}

})

</script>

</body>

</html>

使用v-pre指令之后,跳过所在节点的编译过程

自定义指令

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Document</title>

<script type="text/javascript" src="../js/vue.js"></script> <!-- 引入Vue.js -->

</head>

<body>

<div id="root">

<h2> 当前的n值是:<span v-text="n"></span></h2>

<h2> 放大10倍之后的n值是:<span v-big="n"></span></h2>

<button @click="n++">点我n++</button>

<hr>

<input type="text" v-fbind:value="n">

</div>

<script type="text/javascript">

new Vue({

el:'#root',

data:{

n:1

},directives: {

//函数式写法,何时会被调用

//1.初始化时被调用

//2.指令所在的模板被重新解析时就会发生变化

big(element,binding){

element.innerText=binding.value*10;

},

fbind:{//完整写法,何时会被调用

//指令与元素成功绑定时

bind(element,binding){

console.log('bind')

element.value=binding.value

},

//指令所在元素被插入页面时

inserted(element,binding){

console.log('inserted')

element.focus();

},

//指令所在的模板被重新解析时

update (element,binding) {

console.log('updated')

element.value=binding.value

}

}

}

})

</script>

</body>

</html>

这个一打开就获取焦点这个功能,需要我们在元素被插入到页面时就使用,需要细分时间段

我们需要注意一点,如果我们使用函数时写法时,相当于只写了bind和update

如果自定义v-XXX中出现了--就需要使用' '包裹

如v-max-number:在书写时就需要使用'v-max-number'

而且在自定义中的this不是vm二十windows

如果需要创建全局自定义函数,就需要在创建vue实例之前指定

相关推荐
To_OC7 小时前
写了三遍 Todo List,我终于搞懂了 React 父子组件到底怎么通信
前端·javascript·react.js
勇往直前plus7 小时前
Vue3(篇一) 核心概念——响应式模板语法与组件基础
前端·javascript·vue.js
咩咩啃树皮8 小时前
第43篇:Vue3计算属性(computed)完全精讲——缓存机制、依赖计算、业务最优解
前端·vue.js·缓存
用户938515635079 小时前
从零搭建 AI 日记助手:用 Milvus 向量数据库 + RAG 让机器读懂你的每一天
javascript·人工智能·全栈
徐小夕9 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
a11177610 小时前
坦克大战3D Three.js 3D (开源项目)
开发语言·javascript·3d
kyriewen11 小时前
别再乱用useEffect了——你写的10个里有8个不该存在
前端·javascript·react.js
Ivanqhz11 小时前
Rust &‘static str浅析
java·前端·javascript·rust
IT_陈寒12 小时前
SpringBoot这个分页坑,我踩了三天才爬出来
前端·人工智能·后端
颜酱12 小时前
05 | 召回前置准备:根据业务数据库生成各数据库(读取配置阶段)
前端·人工智能·后端