简介

Vue里面有实例属性($data,$el),实例方法(methods),因为这两个和常用选项类似,不是很常用,所以这次主要写一下实例事件

.stop阻止冒泡

其实就是原生JS 里面的阻止冒泡.stopPropagation()的缩写
具体用法

  1. <-html->
  2. <div @click="divClick" style="width: 100px;height: 100px;background: red;">
  3. <button @click.stop="btnClick">点击按钮</button>
  4. </div>
  5. <-js->
  6. <script>
  7. let app = new Vue({
  8. el: '#app',
  9. data:{
  10. },
  11. methods:{
  12. divClick(){
  13. alert('div被点击了')
  14. },
  15. btnClick(){
  16. alert('btn被点击了')
  17. }
  18. }
  19. })
  20. </script>

这样点击按钮的时候 只会弹窗 btn 被打印了

.self

只是作用在元素本身而非子元素的调用
具体用法

  1. <-html->
  2. <div @click.self="divClick" style="width: 100px;height: 100px;background: red;">
  3. <button @click="btnClick">点击按钮</button>
  4. </div>
  5. <-js->
  6. <script>
  7. let app = new Vue({
  8. el: '#app',
  9. data:{
  10. },
  11. methods:{
  12. divClick(){
  13. alert('div被点击了')
  14. },
  15. btnClick(){
  16. alert('btn被点击了')
  17. }
  18. }
  19. })
  20. </script>

.prevent

每次提交表单都会重载页面,而.prevent 的作用就是提交事件并且不会重载页面
具体用法

  1. <-html->
  2. <form action="" @submit.prevent="hangle">
  3. <button type="submit"> 提交表单</button>
  4. </form>
  5. <-js->
  6. <script>
  7. let app = new Vue({
  8. el: '#app',
  9. data:{
  10. },
  11. methods:{
  12. hangle(){
  13. alert("不会重新加载页面了")
  14. }
  15. }
  16. })
  17. </script>

.sync

  1. <div id="app">
  2. <div>{{bar}}</div>
  3. <my-comp :foo.sync="bar"></my-comp>
  4. <!-- <my-comp :foo="bar" @update:foo="val => bar = val"></my-comp> -->
  5. </div>
  6. <script>
  7. Vue.component('my-comp', {
  8. template: '<div @click="increment">点我+1</div>',
  9. data: function() {
  10. return {copyFoo: this.foo}
  11. },
  12. props: ['foo'],
  13. methods: {
  14. increment: function() {
  15. this.$emit('update:foo', ++this.copyFoo);
  16. }
  17. }
  18. });
  19. new Vue({
  20. el: '#app',
  21. data: {bar: 0}
  22. });
  23. </script>

代码
会被扩展成

就是一个语法糖。

.once

只执行一次事件

  1. <-html->
  2. once: <br>
  3. <button @click="onceMethod">执行无限次</button>
  4. <button @click.once="onceMethod">只是执行一次</button>
  5. <hr>
  6. <script>
  7. let app = new Vue({
  8. el: '#app',
  9. data:{
  10. },
  11. methods:{
  12. onceMethod(){
  13. alert("执行 1 次")
  14. }
  15. }
  16. })
  17. </script>

监听键盘事件

本次以enter 为例,其实还有其他的按键
.enter
.tab
.delete
具体可以看 按键修饰符

  1. <-html->
  2. 监听键盘事件:
  3. <br>
  4. <input @keyup.13 ="submitMe">
  5. <input @keyup.enter ="submitMe">
  6. <script>
  7. let app = new Vue({
  8. el: '#app',
  9. data:{
  10. },
  11. methods:{
  12. submitMe() {
  13. alert('按下了enter键')
  14. }
  15. }
  16. })
  17. </script>

完整代码示例

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>方法与事件</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <hr>
  10. stop用法: <br>
  11. <div @click.self="divclick" style="height: 100px;width: 100px;background-color: blue">
  12. <button @click="btnlcick">点击</button>
  13. </div>
  14. <hr>
  15. prevent的用法:
  16. 每次提交表单都会重载页面
  17. <form action="" @submit.prevent="hangle">
  18. <button type="submit"> 提交表单</button>
  19. </form>
  20. <hr>
  21. once: <br>
  22. <button @click="onceMethod">执行无限次</button>
  23. <button @click.once="onceMethod">只是执行一次</button>
  24. <hr>
  25. 监听键盘事件:
  26. <br>
  27. <input @keyup.13 ="submitMe">
  28. <input @keyup.enter ="submitMe">
  29. </div>
  30. <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
  31. <script>
  32. var app = new Vue({
  33. el:"#app",
  34. data:{
  35. count: 0
  36. },
  37. methods:{
  38. divclick:function () {
  39. alert('div被点击了')
  40. },
  41. btnlcick:function () {
  42. alert('BUTTON被点击了')
  43. },
  44. hangle:function () {
  45. alert('我不重载了,页面也不刷心了')
  46. },
  47. onceMethod:function () {
  48. alert('多少次了?')
  49. },
  50. submitMe:function () {
  51. alert('您按下了enter键')
  52. }
  53. }
  54. })
  55. </script>
  56. </body>
  57. </html>

其他的实例事件

$on(在构造器外部添加事件)
$on接收两个参数,第一个参数是调用时的事件名称,第二个参数是一个匿名方法

  1. app.$on('reduce',function(){
  2. console.log('执行了reduce()');
  3. this.count--;
  4. });

$off(关闭事件)

  1. function off(){
  2. console.log('关闭事件');
  3. app.$off('reduce');
  4. }

$emit(事件调用)

  1. function reduce() {
  2. // 事件调用
  3. console.log('emit事件调用');
  4. app.$emit('reduce');
  5. }