你知道多少vue指令

目录

  

浅聊vue指令

1.为什么学vue指令

2.指令

2.1数据绑定

2.2列表渲染

2.3事件监听

2.3.1 v-on

2.4条件渲染

2.5其他指令

3.自定义指令

3.1实践


前言:

   通过这篇文章,您能了解,vue中的指令,以及使用他们

  需要注意的点,当然话多不如实践,所以我自己自定义了一个简单的指令

    

浅聊vue指令

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指令

我们都了解,在vue中,容器(又称模板),通过vue实例

来管理并解析。最终将数据显示在容器中。如果容器需要绑定

函数的话,就需要在vue实例中书写各种逻辑。

而指令就是封装一系列的逻辑函数。只需要了解使用的场景,以及

语法规则。就可以简化代码量。也是可以与容器建立绑定,实现

数据随data动态改变


2.指令


2.1数据绑定

2.1.1 v-bind

v-bind : 单向绑定解析表达式, 可简写为 :xxx

数据只能从vue实例中的data流向页面

结构如下:

 <div id="root">
 单向数据绑定:<input type="text" :value="name"><br/>
 <div/>
 <!--js部分与前面一样-->

效果就是

页面出现一个input框,里面有data中name的值。

2.1.2v-model

v-model:双向绑定解析表达式

数据不仅能从data流向页面,还可以从页面流向data。

结构如下

 
<div id="root">
 单向数据绑定:<input type="text" v-model:value="name"><br/>
 <div/>
 <!--js部分与前面一样-->

1.双向绑定一般都应用在表单类元素上(如:input、select等)

2.v-model:value 可以简写为 v-model,因为v-model默认收集的就是value值。


2.2列表渲染

使用指令v-for

v-for指令:

1.用于展示列表数据

2.语法:v-for="(item, index) in xxx" :key="yyy"

3.可遍历:数组、对象、字符串(用的很少)、指定次数(用的很少)

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的区别

index是遍历时的每一项的下标。key是每一项的唯一标识。

设想一个场景,当我们已经遍历好一个数组的时候,每一项后面携带一个

input框。这时我们添加一个向数据加入一项数据时,当我们是按顺序添加时,

即数据添加到数组的末位,这时没有任何问题。但是,如果我们是不按顺序添加时

这时index和key的区别就体现出来了

diff算法

Diff算法的作用是用来计算出 Virtual DOM 中被改变的部分,然后针对该部分进行原生DOM操作,而不用重新渲染整个页面,可提交性能

这是通过index为索引的遍历数组

通过key为索引遍历数组时。效果如下

2.3事件监听


2.3.1 v-on

绑定事件监听, 可简写为@后面添加事件

格式如下:

 
<button @click="showInfo1">点我提示信息</button>

在vue实例中配置相应的方法,记住methods中配置的函数,不要用箭头函数!否则this就不是vm了


2.4条件渲染

2.4.1 v-if

写法:

  • v-if="表达式"

  • v-else-if="表达式"

  • .v-else="表达式"

适用于:切换频率较低的场景。

特点:不展示的DOM元素直接被移除。

注意:v-if可以和:v-else-if、v-else一起使用,但要求结构不能被“打断”。

2.4.2 v-show

写法:v-show="表达式"

适用于:切换频率较高的场景。

特点:不展示的DOM元素未被移除,仅仅是使用样式隐藏掉

使用v-if的时,元素可能无法获取到,而使用v-show一定可以获取到。


2.5其他指令

2.5.1 v-text

1.作用:向其所在的节点中渲染文本内容。

2.与插值语法的区别:v-text会替换掉节点中的内容,{ {xx}}则不会。

比如

<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

v-cloak指令(没有值):

1.本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性。

2.使用css配合v-cloak可以解决网速慢时页面展示出{ {xxx}}的问题

2.5.3 v-once

用法:

 <h2 v-once>初始化的n值是:{
  
  {n}}</h2>

v-once指令:

1.v-once所在节点在初次动态渲染后,就视为静态内容了。

2.以后数据的改变不会引起v-once所在结构的更新,可以用于优化性能。

就比如当我们绑定一个数据增加1时的点击事件时,我们点击后,绑定v-once

的节点初次会渲染,点击后不在渲染。

2.5.4 v-pre

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

v-pre指令:

1.跳过其所在节点的编译过程。

2.可利用它跳过:没有使用指令语法、没有使用插值语法的节点


3.自定义指令

在自定义指令需要用到一个vue实例的一个属性directives

用法就是directives:{指令名:配置对象} 或 directives{指令名:回调函数}

配置对象中常用的3个回调:

(1).bind:指令与元素成功绑定时调用。

(2).inserted:指令所在元素被插入页面时调用。

(3).update:指令所在模板结构被重新解析时调用。

在这些回调中会接到两个参数

element :DOM节点

binding:事件的实例

3.1实践

定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍

<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

 好了这次的文章就到这了

如果觉得还不错的话,帮忙点个关注吧

欢迎大家积极探讨

猜你喜欢

转载自blog.csdn.net/m0_51311990/article/details/124509921