前端Vue学习条记02

打印 上一主题 下一主题

主题 1032|帖子 1032|积分 3096

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
03v-on的变乱修饰符

`v-on` 提供了很多变乱修饰符来辅助实现一些功能。变乱修饰符有如下:
- `.stop`  制止冒泡。本质是调用 event.stopPropagation()。
- `.prevent`  制止默认变乱(默认行为)。本质是调用 event.preventDefault()。
- `.capture`  添加变乱监听器时,使用捕获的方式(也就是说,变乱采用捕获的方式,而不是采用冒泡的方式)。
- `.self`  只有当变乱在该元素本身(比如不是子元素)触发时,才会触发回调。
- `.once`  变乱只触发一次。
- `.{keyCode | keyAlias}`   只当变乱是从侦听器绑定的元素本身触发时,才触发回调。
- `.native` 监听组件根元素的原生变乱。
PS:一个变乱,答应同时使用多个变乱修饰符。

  1.           <!-- click事件 -->
  2.         <button v-on:click="doThis"></button>
  3.         <!-- 缩写 -->
  4.         <button @click="doThis"></button>
  5.         <!-- 内联语句 -->
  6.         <button v-on:click="doThat('hello', $event)"></button>
  7.         <!-- 阻止冒泡 -->
  8.         <button @click.stop="doThis"></button>
  9.         <!-- 阻止默认行为 -->
  10.         <button @click.prevent="doThis"></button>
  11.         <!-- 阻止默认行为,没有表达式 -->
  12.         <form @submit.prevent></form>
  13.         <!--  串联修饰符 -->
  14.         <button @click.stop.prevent="doThis"></button>
复制代码
.stop

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7.     <title>Document</title>
  8.     <script src="vue2.5.16.js"></script>
  9.     <style>
  10.         .father {
  11.             height: 300px;
  12.             width: 300px;
  13.             background: pink;
  14.         }
  15.         .child {
  16.             width: 200px;
  17.             height: 200px;
  18.             background: green;
  19.         }
  20.     </style>
  21. </head>
  22. <body>
  23.     <div id="app">
  24.         <div class="father" @click="fatherClick">
  25.             <div class="child" @click="childClick">
  26.             </div>
  27.         </div>
  28.     </div>
  29.     <script>
  30.         var vm = new Vue({
  31.             el: '#app',
  32.             data: {},
  33.             methods: {
  34.                 fatherClick: function () {
  35.                     console.log('father 被点击了');
  36.                 },
  37.                 childClick: function () {
  38.                     console.log('child 被点击了');
  39.                 }
  40.             }
  41.         })
  42.     </script>
  43. </body>
  44. </html>
复制代码
.capture

.capture:触发变乱时,采用捕获的情势,而不是冒泡的情势。
  1.     <div class="father" @click.capture="fatherClick">
复制代码
.prevent

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7.     <title>Document</title>
  8.     <script src="vue2.5.16.js"></script>
  9. </head>
  10. <body>
  11.     <div id="app">
  12.         <!-- 通过 .prevent 阻止超链接的默认跳转行为 -->
  13.         <a href="http://www.baidu.com" @click.prevent="linkClick">百度一下</a>
  14.     </div>
  15.     <script>
  16.         var vm = new Vue({
  17.             el: '#app',
  18.             data: {},
  19.             methods: {
  20.                 linkClick: function () {
  21.                     console.log('超链接被点击了');
  22.                 }
  23.             }
  24.         })
  25.     </script>
  26. </body>
  27. </html>
  28. //如果去掉`.prevent`,点击按钮后,既会打印log,又会跳转到百度页面。
  29. //现在加上了`.prevent`,就只会打印log,不会跳转到百度页面。
复制代码
.self

`.self`  只有当变乱在该元素本身(比如不是子元素)触发时,才会触发回调。
  1.     <div class="father" @click.self="fatherClick">
复制代码
既然`.stop`和`.self`都可以制止冒泡,那二者有什么区别呢?区别在于:前者能够制止整个冒泡行为,而后者只能制止自己身上的冒泡行为。

04 Vue的系统指令(二)

v-model:双向数据绑定

重点:双向数据绑定,只能用于表单元素,或者用于自界说组件
v-bind:只能实现数据的单向绑定,从 M 主动绑定到 V

注意:v-model 只能运用在**表单元素**中,或者用于自界说组件。常见的表单元素包括:input(radio, text, address, email....) 、select、checkbox 、textarea。
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Document</title>
  6.     <script src="vue.js"></script>
  7. </head>
  8. <body>
  9. <div id="app">
  10.     <form action="#">
  11.         <!-- 将 input 标签中的value值双向绑定到 Vue实例中的data。注意,v-model 后面不需要跟冒号 -->
  12.         <input type="text" id="username" v-model="myAccount.username">
  13.         <input type="password" id="pwd" v-model="myAccount.userpwd">
  14.         <input type="submit" v-on:click="submit1" value="注册">
  15.     </form>
  16. </div>
  17. </body>
  18. <script>
  19.     var vm = new Vue({
  20.         el: '#app',
  21.         //上面的标签中采用v-model进行双向数据绑定,数据会自动更新到data里面来
  22.         data: {
  23.             name: 'qianguyihao',
  24.             myAccount: {username: '', userpwd: ''}
  25.         },
  26.         //在methods里绑定各种方法,根据业务需要进行操作
  27.         methods: {
  28.             submit1: function () {
  29.                 alert(this.myAccount.username + "  pwd=" + this.myAccount.userpwd);
  30.             }
  31.         }
  32.     });
  33. </script>
  34. </html>
复制代码
v-for

在 Vue 2.2.0+ 版本里,当在**组件中**使用 v-for 时,key 属性是必须要加上的。
key的类型只能是:string/number,而且要通过 v-bind 来指定。
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7.     <title>Document</title>
  8.     <script src="vue2.5.16.js"></script>
  9. </head>
  10. <body>
  11.     <div id="app">
  12.         <div>
  13.             <label>Id:
  14.                 <input type="text" v-model="id">
  15.             </label>
  16.             <label>Name:
  17.                 <input type="text" v-model="name">
  18.             </label>
  19.             <input type="button" value="添加" @click="add">
  20.         </div>
  21.         <!-- 注意: v-for 循环的时候,key 属性只能使用 number 或者 string -->
  22.         <!-- 注意: key 在使用的时候,必须使用 v-bind 属性绑定的形式,指定 key 的值 -->
  23.         <!-- 在组件中,使用v-for循环的时候,或者在一些特殊情况中,如果 v-for 有问题,必须 在使用 v-for 的同时,指定 唯一的 字符串/数字 类型 :key 值 -->
  24.         <p v-for="item in list" :key="item.id">
  25.             <input type="checkbox">{{item.id}} --- {{item.name}}
  26.         </p>
  27.     </div>
  28.     <script>
  29.         // 创建 Vue 实例,得到 ViewModel
  30.         var vm = new Vue({
  31.             el: '#app',
  32.             data: {
  33.                 id: '',
  34.                 name: '',
  35.                 list: [
  36.                     { id: 1, name: 'smyh' },
  37.                     { id: 2, name: 'vae' },
  38.                     { id: 3, name: 'qianguyihao' },
  39.                     { id: 4, name: 'xiaoming' },
  40.                     { id: 5, name: 'xiaohong' }
  41.                 ]
  42.             },
  43.             methods: {
  44.                 add() { // 添加方法
  45.                     this.list.unshift({ id: this.id, name: this.name })
  46.                 }
  47.             }
  48.         });
  49.     </script>
  50. </body>
  51. </html>
复制代码
 v-if:设置元素的显示和隐蔽(添加/删除DOM元素)

作用:根据表达式的值的真假条件,来决定是否渲染元素,如果为false则不渲染(到达隐蔽元素的目的),如果为true则渲染。在切换时,元素和它的数据绑定会被烧毁并重建。
  1. /******点击按钮时,切换和隐藏盒子)****/
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5.   <meta charset="UTF-8">
  6.   <title>Document</title>
  7.   <script src="vue.js"></script>
  8. </head>
  9. <body>
  10.   <div id="app">
  11.     <button v-on:click="toggle">显示/隐藏</button>
  12.     <div v-if="isShow">我是盒子</div>
  13.   </div>
  14. </body>
  15. <script>
  16.   new Vue({
  17.     el: '#app',
  18.     data: {
  19.       isShow: true
  20.     },
  21.     methods: {
  22.       toggle: function() {
  23.         this.isShow = !this.isShow;
  24.       }
  25.     }
  26.   });
  27. </script>
  28. </html>
复制代码
v-show:设置元素的显示和隐蔽

作用:根据表达式的真假条件,来切换元素的 display 属性。如果为false,则在元素上添加 `display:none`属性;否则移除`display:none`属性。
  1. (点击按钮时,切换和隐藏盒子)
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5.   <meta charset="UTF-8">
  6.   <title>Document</title>
  7.   <script src="vue.js"></script>
  8. </head>
  9. <body>
  10.   <div id="app">
  11.     <button v-on:click="toggle">显示/隐藏</button>
  12.     <div v-show="isShow">我是盒子</div>
  13.   </div>
  14. </body>
  15. <script>
  16.   new Vue({
  17.     el: '#app',
  18.     data: {
  19.       isShow: true
  20.     },
  21.     methods: {
  22.       toggle: function() {
  23.         this.isShow = !this.isShow;
  24.       }
  25.     }
  26.   });
  27. </script>
  28. </html>
复制代码
v-if和v-show的区别
`v-if`和`v-show`都能够实现对一个元素的隐蔽和显示操作。
区别:
- v-if:每次都会重新添加/删除DOM元素
- v-show:每次不会重新举行DOM的添加/删除操作,只是在这个元素上添加/移除`style="display:none"`属性,表现节点的显示和隐蔽。
优缺点:
- v-if:有较高的切换性能斲丧。这个很好明白,究竟每次都要举行dom的添加/删除操作。
- v-show:**有较高的初始渲染斲丧**。也就是说,纵然一开始`v-show="false"`,该节点也会被创建,只是隐蔽起来了。而`v-if="false"`的节点,根本就不会被创建。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

干翻全岛蛙蛙

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表