目录
浅聊vue指令
<div id="root">
//模板语法
<h1>Hello{{name}}</h1>
</div>
<script type="text/javascript">
Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
new Vue({
el:'#root',
data:{
name:'尚硅谷'
}
})
1.为什么学vue指令
2.指令
2.1数据绑定
2.1.1 v-bind
数据只能从vue实例中的data流向页面
结构如下:
<div id="root">
单向数据绑定:<input type="text" :value="name"><br/>
<div/>
<!--js部分与前面一样-->
效果就是
页面出现一个input框,里面有data中name的值。
2.1.2v-model
数据不仅能从data流向页面,还可以从页面流向data。
结构如下
<div id="root">
单向数据绑定:<input type="text" v-model:value="name"><br/>
<div/>
<!--js部分与前面一样-->
2.2列表渲染
使用指令v-for
eg:
<div id="root">
<!-- 遍历数组
<h2>人员列表(遍历数组)</h2>
<ul>
<li v-for="(p,index) of persons" :key="index">
{{p.name}}-{{p.age}}
</li>
</ul>
<div/>
new Vue({
el:'#root',
data:{
persons:[
{id:'001',name:'张三',age:18},
{id:'002',name:'李四',age:19},
{id:'003',name:'王五',age:20}
],
})
2.2.1了解在v-for中index和key的区别
diff算法
这是通过index为索引的遍历数组
通过key为索引遍历数组时。效果如下
2.3事件监听
2.3.1 v-on
绑定事件监听, 可简写为@后面添加事件
格式如下:
<button @click="showInfo1">点我提示信息</button>
2.4条件渲染
2.4.1 v-if
写法:
-
v-if="表达式"
-
v-else-if="表达式"
-
.v-else="表达式"
2.4.2 v-show
写法:v-show="表达式"
使用v-if的时,元素可能无法获取到,而使用v-show一定可以获取到。
2.5其他指令
2.5.1 v-text
比如
<div id="root">
<!-- 遍历数组
<h2>人员列表(遍历数组)</h2>
<ul>
<li v-for="(p,index) of persons" :key="index">
{{p.name}}-{{p.age}}
</li>
</ul>
<div/>
new Vue({
el:'#root',
data:{
persons:[
{id:'001',name:'张三',age:18},
{id:'002',name:'李四',age:19},
{id:'003',name:'王五',age:20}
],
})
2.5.2 v-cloak
2.5.3 v-once
用法:
<h2 v-once>初始化的n值是:{{n}}</h2>
就比如当我们绑定一个数据增加1时的点击事件时,我们点击后,绑定v-once
的节点初次会渲染,点击后不在渲染。
2.5.4 v-pre
<h2 v-pre>Vue其实很简单</h2>
3.自定义指令
在自定义指令需要用到一个vue实例的一个属性directives
用法就是directives:{指令名:配置对象} 或 directives{指令名:回调函数}
在这些回调中会接到两个参数
element :DOM节点
binding:事件的实例
3.1实践
<div id="root">
<h2>{{name}}</h2>
<h2>当前的n值是:<span v-text="n"></span> </h2>
<h2>放大10倍后的n值是:<span v-big="n"></span> </h2>
</div>
new Vue({
el:'#root',
data:{
name:'尚硅谷',
n:1
},
directives:{
//big函数何时会被调用
//1.指令与元素成功绑定时(一上来)。
//2.指令所在的模板被重新解析时。
big(element,binding){
console.log('big',this) //注意此处的this是window
console.log(element,binding)
element.innerText = binding.value * 10
},
}
在directives属性中定义指令时,this是window