vue的指令

vue的指令指令 指令的概念(6种) 指令(Directives)是vue为开发者提供的模版语法,用于辅助开发者渲染页面的基本结构。 按照不同的用途可以分为以下6大类 内容渲染指令 属性绑定指令 事件绑定指令 双向绑定指令 条件渲染指令 列表渲染指令 1. 内容渲染指令p37 内容渲染指令用来辅助开发者渲染DO

vue的指令"

指令

指令的概念(6种)

指令(Directives)是vue为开发者提供的模版语法,用于辅助开发者渲染页面的基本结构

按照不同的用途可以分为以下6大类

  1. 内容渲染指令

  2. 属性绑定指令

  3. 事件绑定指令

  4. 双向绑定指令

  5. 条件渲染指令

  6. 列表渲染指令

1. 内容渲染指令p37

内容渲染指令用来辅助开发者渲染DOM元素的文本内容,常用的内容渲染指令有三个

  • v-text

  • {{}}

  • V-html

v-text

缺点:v-text指令会覆盖原本内部的内容。

<div id="app">
   <p v-text="username"></p>
   <!-- v-text指令会覆盖原本内部的内容 -->
   <p v-text="gender">gender:</p>
   <p>xingbie </p>
</div>

<script src="./lib/vue-2.6.12.js"></script>

<script>
const vm = new Vue({
   el:'#app',
   data:{
       username:'mingzi',
   gender:'male'
}
})
</script>

 

{{}}

差值表达式(Mustache),专门用来解决v-text指令会覆盖原本内部的内容的问题。

使用最多,一个类似${}的内容的占位符。

差值表达式只能用在内容节点,而属性节点(eg:placeholder=”{{}}”无法正常显示且会报错)。

<!-- 只能写一个id="app"的div,写第二个会被无视 -->
   <div id="app">
       <p v-text="username"></p>
       <p v-text="gender">gender:</p>
   <hr>
       <p>username:{{username}}</p>
       <p>gender:{{ gender }}</p>
   </div>

   <script src="./lib/vue-2.6.12.js"></script>

   <script>
       const vm = new Vue({
           el:'#app',
           data:{
               username:'mingzi',
               gender:'male'
          }
      })
 //el可以被vm.$mount('app')替代。
   </script>

V-html

可以把带有标签的字符串渲染成真正的HTML内容

<!-- 只能写一个id="app"的div,写第二个会被无视 -->
<div id="app">
 <p v-text="username"></p>
<p v-text="gender">gender:</p>
<hr>
 <p>username:{{username}}</p>
<p>gender:{{ gender }}</p>
<hr>
 <div v-text="info"></div>
<div>{{ info }}</div>
<div v-html="info"></div>
</div>

<script src="./lib/vue-2.6.12.js"></script>

<script>
 const vm = new Vue({
   el:'#app',
   data:{
     username:'mingzi',
     gender:'male',
     info:'<h4 style="color: red;font-weight: bold ;">this is info</h4>'
  }
})
</script>

 

2.属性绑定指令

v-bind:/:

元素的属性动态绑定属性值

vue规定,’v-bind:’可以简写为’:

如果绑定内容需要动态拼接,则字符串的外面应该包裹单引号,见2.5

示例

<body>
 <div id="app">
   <input type="text" :placeholder="tips">
 </div>
 <!-- 导入vue的库文件,在window全局就有了Vue这个构造函数 -->
 <script src="../lib/vue-2.6.12.js"></script>
 <script>
   //创建vue的实例对象
   const vm = new Vue({
     //固定写法
     el: '#app',
     data: {
       //1.将tips里的值渲染到placeholder中
       tips: "keyin"
    },
     methods: {

    }
  })

 </script>
</body>

2.5在差值和属性绑定中写js表达式

在vue的模版渲染语法中,除了支持绑定简单的数据值之外,还支持js表达式的运算。

{{number+1}}

{{ok?1:0}}

{{message.split('').reverse().join('')}}//字符串倒过来:字先分割为数组再反转再拼

<div v-bind:id="'list-'+id"></div>

3.事件绑定指令

v-on

v-on事件绑定指令,辅助开发者完成DOM元素绑定事件监听。

on+原生事件:v-on:keyup

示例

<body>
 <div id="app">
   <p>count is {{ count }}</p>
   <!-- 格式:v-on:事件名称="事件处理函数的名称" -->
   <button v-on:click="addCount">+1</button>
 </div>
 <!-- 导入vue的库文件,在window全局就有了Vue这个构造函数 -->
 <script src="../lib/vue-2.6.12.js"></script>
 <script>
   //创建vue的实例对象
   const vm = new Vue({
     //固定写法
     el: '#app',
     data: {
       count: 0,
    },
     methods: {
       //addCount: function () {
       addCount(){//简写
         //this=vm构造函数
         this.count += 1
      }
    }
  })

 </script>
</body>

绑定事件并传参

<body>
   <div id="app">
       <p>count is {{ count }}</p>
       <!-- 格式:v-on:事件名称="事件处理函数的名称" -->
    <!-- 小括号传递参数 -->
       <button v-on:click="addCount(9)">+1</button>
   </div>
   <!-- 导入vue的库文件,在window全局就有了Vue这个构造函数 -->
   <script src="../lib/vue-2.6.12.js"></script>
   <script>
       //创建vue的实例对象
       const vm = new Vue({
           //固定写法
           el: '#app',
           data: {
               count: 0,
          },
           methods: {
               //addCount: function () {
               addCount(n){//简写
                   this.count += n
              }
          }
      })

   </script>
</body>

@

‘v-on:‘简写为’@'(去掉”)

$event

当事件处理函数没有绑定变量,那么自带事件对象e,eg:

methods: {
 //addCount: function () {
 addCount(e){//简写
   this.count++

   if (this.count%2==0) {
     e.target.style.backgroundColor = 'red'
  }
}
}

但是当当事件处理函数绑定了变量,这时候vue提供了内置变量,名字叫做$event,它就是原生的DOM的事件对象e,这个$event是固定写法。

<body>
   <div id="app">
       <p>count is {{ count }}</p>
       <!-- 格式:v-on:事件名称="事件处理函数的名称" -->
       <!-- 小括号传递参数 -->
       <!-- n和$event顺序无所谓,但是下方函数要和这里顺序相同 -->
       <button v-on:click="addCount(99,$event)">+1</button>
   </div>
   <!-- 导入vue的库文件,在window全局就有了Vue这个构造函数 -->
   <script src="../lib/vue-2.6.12.js"></script>
   <script>
       //创建vue的实例对象
       const vm = new Vue({
           //固定写法
           el: '#app',
           data: {
               count: 0,
          },
           methods: {
               //addCount: function () {
               addCount(n,e){//简写
                   this.count+=n

                   if (this.count%2==0) {
                       e.target.style.backgroundColor = 'red'
                  }else{
                       e.target.style.backgroundColor = ''
                  }
              }
          }
      })
   </script>
</body>

事件修饰符

在原生中,阻止表单/链接自动跳转用e.preventDefault(),阻止冒泡e.stopPagation()

vue提供了更简单的写法

<a href:"url" @click.prevent="name">跳转</a>

事件修饰符用来更简便的对事件的触发进行控制,常用的五个如下:

事件修饰符 说明
.prevent 阻止默认行为(阻止链接跳转,表单提交等)。
.stop 阻止事件冒泡。
.capture 以捕获模式触发当前的事件处理函数。
.once 绑定的事件只触发一次。
.self 只有在e.target是当前元素自身时触发事件处理函数。

按键修饰符

在监听键盘事件时,经常需要判断详细的按键,可以为键盘相关事件添加按键修饰符

<input @keyup.enter='submit'>// 只有在’key’是’Enter’时调用submit()

<input @keyup.esc='clearInput'>//只有在’key’是’Esc’时调用clearInput()

示例

<body>
 <div id="app">
   <input type="text" @keyup.esc="clearInput">
 </div>
 <!-- 导入vue的库文件,在window全局就有了Vue这个构造函数 -->
 <script src="../lib/vue-2.6.12.js"></script>
 <script>
   //创建vue的实例对象
   const vm = new Vue({
     //固定写法
     el: '#app',
     data: {

    },
     methods: {
       clearInput(e){//这个e必须写
         e.target.value=''
      }
    }
  })
 </script>
</body>

 

4.双向绑定指令

v-model

vue提供了v-model双向数据绑定指令,在不操作dom的前提下,快速获得表单的数据

只能表单元素使用:input,textarea,select。

可以理解为有value属性的就可以使用。

示例

<div id="App">
 <p>{{ username }}</p>
 <input type="text" v-model="username "><hr>
 <input type="text" :value="username"><hr>
 <select v-model="city">
   <option value="11">choose please</option>
   <option value="22">bei</option>
   <option value="33">shang</option>
   <option value="44">guang</option>
 </select>
</div>
<script src="../components/lib/vue-2.6.12.js"></script>
<script>
 //Vue.config.devtools = true;
 const vm = new Vue({
   el:"#App",
   data:{
     username:'aaa',
     city:'22',
  },

})
</script>

v-model指令的修饰符

修饰符 作用 示例
.number 自动将用户输入的值转为数值类型 <input v-model.number="age"/>
.trim 自动过滤用户输入的空白字符 <input v-model.trim="msg"/>
.lazy 在’change’时而非’input’时更新 <input v-model.lazy="msg"/>

注意:例如.number修饰符改变的是用户输入的值,而非data里的初始值。

示例

<div id="App">
 <input type="text" v-model.number="n1">+<input type="text" v-model.number="n2"> = <span>{{n1+n2}}</span>
</div>
<script src="../components/lib/vue-2.6.12.js"></script>
<script>
 Vue.config.devtools = true;
 const vm = new Vue({
   el:"#App",
   data:{
     username:'aaa',
     //city:'22',
     n1:1,
     n2:2,
  },

})
</script>

 

5.条件渲染指令

v-if/v-show

条件渲染指令用来辅助开发者按需控制DOM的显示与隐藏,分别为v-if/v-show

 

V-if=flase 是动态删除掉了元素。

如果刚进入页面,某些元素默认不需要被展示,而且后期这个元素也不一定需要被展示,这时用v-if性能更好。

 

v-show=false 是给元素加上了display:none;这个属性进行隐藏。

如果要频繁的切换元素的显示状态,用v-show性能会更好

示例

<div id="app">
 <p v-if="networkState === 200">请求成功,被v-if控制</p>
 <p v-show="networkState === 200">请求成功,被v-show控制</p>
</div>
<div id="App">
 <p v-if="flag">v-if</p>
 <p v-show="flag">v-show</p>
</div>
<script src="./lib/vue-2.6.12.js"></script>
<script>
 const vm = new Vue({
   el:"#App",
   data:{
     // 若flag为true,则显示被控制的元素,如果为false则隐藏被控制的元素。
     flag:true,
  },
})
</script>

v-else-if/v-else

作为v-if的 “else-if块”,可以连续使用:

注意!v-else-if指令必须配合v-if一起使用,否则将无法被识别。

<div v-if="grade>=90">A</div>
<div v-else-if="grade>=80">B</div>
<div v-else-if="grade>=60">C</div>
<div v-else>D</div>

6.列表渲染指令

v-for

v-for列表渲染指令,基于一个数组循环来渲染一个列表结构

v-for指令需要 item in items 形式的特殊语法。

item:被循环的每一项

items:待循环的数组

示例

<ul>
 <li v-for="item in list">{{ item.name }}</li>
</ul>
...
data:{
list:[//列表数据
{id:1,name:'aaa'}
{id:2,name:'bbb'}
]
}

V-for的index

v-for 指令还支持可选的第二个参数index,即当前项的索引。

语法格式为 (item,index) in items

注意:item项与index索引值都为形参,可以根据需要进行重命名,例如:(user,i) in userlist

:key

建议:在使用了v-for指令,一定要绑定一个:key 属性:提升性能,防止列表紊乱。

并且尽量把id作为key的值:key='item.id'; id的值具有唯一性。

key的值的类型要求为:string或number

key的值不能重复唯一性),否则会终端报错。错误代码:’duplicate keys detected’。

使用index作为key值无意义,因为index的值不唯一:id和数据绑定,但是index和位置绑定,位置上的数据不稳定,例如使用unshift给列表前加上项,之前index项对应的数据会往后延,即index的值不唯一。

综合示例

<head>
   <meta charset="UTF-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
   <link rel="stylesheet" href="./lib/bootstrap.css">
</head>

<body>
   <div id="App">
       <ul>
           <li v-for="item in list" :key="item.id">{{ item.name }}</li>
       </ul>

       <table class="table table-bordered table-hover table-striped">
           <thead>
               <th>index</th>
               <th>id</th>
               <th>name</th>
           </thead>
           <tbody>
               <!-- 要循环谁就给谁加 -->
               <tr v-for="(item,index) in list" :key="item.id">
                   <td>{{index}}</td>
                   <td>{{item.id}}</td>
                   <td>{{item.name}}</td>
               </tr>
           </tbody>
       </table>
   </div>
   <script src="./lib/vue-2.6.12.js"></script>
   <script>
       const vm = new Vue({
           el: '#App',
           data: {
               list: [//列表数据
                  { id: 1, name: 'aaa' },
                  { id: 2, name: 'bbb' },
                  { id: 3, name: 'ccc' }
              ]
          }
      })
   </script>
</body>
 

今天的文章vue的指令分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/56977.html

(0)
编程小号编程小号
上一篇 2023-08-26 08:11
下一篇 2023-08-26 08:30

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注