easonhuang123 / blog

用issues写博客
41 stars 5 forks source link

Vue基础之事件处理 #2

Open easonhuang123 opened 7 years ago

easonhuang123 commented 7 years ago

Vue基础之事件处理

v-on:something用于绑定事件监听器,监听DOM变化来触发事件(something),可简写为@something。

<div id="app">
  <button type="button" @click="click">点击我获取信息</button>
  <p>{{msg}}</p>
</div>
var vm = new Vue({
  el: '#app',
  data: {
    msg: '等待点击。。。'
  },
  methods: {
    click: function() {
      this.msg = '按钮被点击啦';
    }
  }
});

我们也可以在调用的方法中访问原生DOM事件

<div id="app">
  <input type="text" @change="prompt"/>
  <p>{{msg}}</p>
</div>
var vm = new Vue({
  el: '#app',
  data: {
    msg: '等待输入。。。'
  },
  methods: {
    prompt: function(event) {
      this.msg = event.target.value;
    }
  }
});

事件修饰符:Vue通过事件修饰符为DOM事件进行很多细节上的处理,能让我们更加专注于代码逻辑中。

原本点击按钮应该会出现两次弹窗,但是.stop阻止了事件往外层传递,结果只出现内层弹窗

<div id="app">
  <div @click="outer">
    <button @click.stop="inner">button</button>
  </div>
</div>
var vm = new Vue({
  el: '#app'
  methods: {
    inner: function() {
      alert('这是内层button');
    },
    outer: function() {
      alert('这是外层 div,可是.stop阻止了我');
    }
  }
});
<div id="app">
  <a href="www.baidu.com" @click.prevent>我是一条假链接</a>
</div>
var vm = new Vue({
  el: '#app'
});
<div id="app">
  <div @click.capture="outer">
    <button @click .capture="inner">button</button>
  </div>
</div>
var vm = new Vue({
  el: '#app'
  methods: {
    inner: function() {
      alert('这是内层button');
    },
    outer: function() {
      alert('这是外层 div,我会先触发哦~');
    }
  }
});
<div id="app">
  <div @click.self="outer">
    <button @click .self="inner">button</button>
  </div>
</div>
var vm = new Vue({
  el: '#app'
  methods: {
    inner: function() {
      alert('这是内层button,你点谁就触发谁');
    },
    outer: function() {
      alert('这是外层 div,你点谁就触发谁');
    }
  }
});
<div id="app">
  <button @click .once=" once ">button</button>
</div>
var vm = new Vue({
  el: '#app'
  methods: {
    once: function() {
      alert('点击事件只会执行一次哦');
    }
  }
});