冇事来学系--Vue2.0事件绑定

简介: 事件绑定指令v-on事件绑定指令,用于为DOM元素绑定事件监听语法格式 --> v-on: 事件名称="事件处理函数名称"若需要传递参数,则在事件处理函数名称后面加个括号( ),在括号内写入参数

事件绑定指令


  • v-on事件绑定指令,用于为DOM元素绑定事件监听
  • 语法格式 --> v-on: 事件名称="事件处理函数名称"
  • 若需要传递参数,则在事件处理函数名称后面加个括号( ),在括号内写入参数
<!-- 点击按钮,count的值+1或者-1 -->
<div id="app">
  <p>count 的值为:{{ count }}</p>
  <button v-on:click="addCount"> +1 </button>
  <button v-on:click="subCount"> -1 </button>
  <button v-on:click="addN(2)"> +n </button>    <!-- 每次加2 -->
</div>


// el是表明vue控制区域的;data对象是要渲染到页面的数据;methods对象是定义事件处理函数的位置
const vm = new Vue({      // 创建vue实例对象
  el: '#app',
  data: {
    count: 0
  },
  methods: {            // 注意是methods,s别丢了
    add: function(){},    // 这种是普通的写法,日常开发中通常使用简写,如下:
    addCount(){
      console.log(vm)   // 打印vue实例对象vm,可以发现要修改的数据count是vm的一个属性
      // vm.count += 1      // 通过vm对象的count属性,来修改count的值。但是通常不这么写,而是直接用this
      this.count += 1   // this指向的就是vue的对象实例vm
    },
    subCount(){
      this.count -= 1
    },
    addN(n){
      this.count += n
    }
  }
})


  • 由于v-on指令使用的非常多,所以通常使用简写,符号为@    (v-bind简写为冒号:)

事件处理函数的简写:当事件处理函数只有一句代码时,可以 直接写在行内,以字符串的形式,在绑定事件的背后用等号连接

<button @click="i+=1">加1</button>


事件对象$event

  • 使用事件对象的两种情况
<div id="app">
  <p>count 的值为:{{ count }}</p>
  <button v-on:click="add"> +n </button>    
</div>
// 需求:当count为偶数的时候,按钮背景颜色变为红色
const vm = new Vue({      // 创建vue实例对象
  el: '#app',
  data: {
    count: 0
  },
  methods: {            // 注意是methods,s别丢了
    add(e){
      this.count += 1;
      // 判断this.count是否为偶数,来决定按钮背景变色
      if(this.count %2 == 0){
        e.target.style.backgroundColor = 'red'      // e.target是触发事件的事件源
      }else {
        e.target.style.backgroundColor = ''
      }
    }
  }
})
<div id="app">
  <p>count 的值为:{{ count }}</p>
  <button v-on:click="add(1)"> +n </button> <!-- 当事件处理函数传入参数时,就会覆盖掉原有的事件对象 -->
</div>
const vm = new Vue({      // 创建vue实例对象
  el: '#app',
  data: {
    count: 0
  },
  methods: {            // 注意是methods,s别丢了
    add(e){             // 因为上面的使用,add函数是传入了参数的,所以这个e是形参而非事件对象
      this.count += 1;
      // 判断this.count是否为偶数,来决定按钮背景变色
      if(this.count %2 == 0){
        e.target.style.backgroundColor = 'red'      // e是形参也就没有e.target,所以这里会报错
      }else {
        e.target.style.backgroundColor = ''
      }
    }
  }
})
  • 对于传入的参数覆盖了事件对象e的问题, vue提供了一个内置变量$event,这就是原生DOM的事件对象e

如果默认的事件对象e被覆盖了,则可以手动传递一个$event

<button v-on:click="add(1, $event)"> +n </button> <!-- 这里传入两个实参,$event的就是事件对象(固定写法) -->
// 处理函数定义也要写入两个形参
add(n, e){              // 这两个参数位置可换
      this.count += n;
      // 判断this.count是否为偶数,来决定按钮背景变色
      if(this.count %2 == 0){
        e.target.style.backgroundColor = 'red'      // e是形参也就没有e.target,所以这里会报错
      }else {
        e.target.style.backgroundColor = ''
      }
    }


目录
相关文章
|
前端开发 JavaScript
react修仙笔记,请问仙溪几级了?
react在企业项目中已经变成了一个必不可少的UI框架,从过去早期有jquery,后面有bootstrap兴起,jquery可以说二次封装的原生js,bootstarp可以快速搭建一个精美网页,现在基本很少用bootstrap和jquery了,基本上vuejs,react,angular三分天下,国内vuejs和react居多,angular很少用
react修仙笔记,请问仙溪几级了?
|
JavaScript 容器
冇事来学系--Vue2.0中VueComponent(组件)
组件的本质 组件的本质就是一个 构造函数 f VueComponent (options) { this._init(options); } ,是Vue.extend( )生成的 当我们使用组件时,写了组件的标签,Vue解析时就会创建该组件的实例对象,即Vue帮我们执行了这一句代码 new VueComponent(options) (options就是我们写的data、methods、computed等数据) 每次调用Vue.extend( )时,返回的都是一个全新的VueComponent
309 0
|
存储 JavaScript 前端开发
冇事来学系--Vue2.0中vuex(上)
专门在Vue中实现集中式状态 (数据) 管理的一个Vue插件,对vue中多个组件的共享状态进行集中式的管理(读/写) ,适用于任意组件之间的通信
185 0
|
前端开发 JavaScript 数据库
冇事来学系--Vue2.0中Promise详讲(上)
回调地狱 多层回调函数的相互嵌套,就形成了回调地狱
308 0
|
前端开发
冇事来学系--Vue2.0中Promise详讲(下)
then-fs的基本使用 可以通过node下载then-fs。 npm install then-fs
165 0
|
JavaScript 前端开发
冇事来学系--Vue2.0中讲讲生命周期吧
生命周期(Life Cycle) 是指一个组件从创建->运行->销毁的整个阶段,强调的是一个时间段。 生命周期函数:是由vue框架提供的内置函数,会伴随着组件的生命周期,自动按次序执行 。是vue在关键时刻帮我们调用的一些特殊名字的函数。 生命周期函数中的this指向的是vm或组件实例对象
177 0
|
JavaScript
冇事来学系--Vue2.0 组件开发详讲(下)
组件的自定义属性props props节点是和data、methods等同级的节点,值是一个数组
131 0
|
存储 前端开发 JavaScript
冇事来学系--Vue2.0中路由Router
路由的概念与原理 路由(router),就是对应关系。即 Hash地址(锚点链接) 与 组件 之间的对应关系 注意:锚点链接的特点-->不会刷新页面,但是会产生浏览历史
205 0
|
JavaScript 前端开发
冇事来学系--Vue2.0中vue-cli使用
单页面应用程序(Single Page Application) 一个web网站只有一个HTML页面,所有的功能与交互都在这一个页面上完成
132 0
|
JavaScript 前端开发 API
vue3,你还为状态为何物而发愁吗?(一)
为啥需要状态?因为组件划分的非常原子化(细腻),所以造成了很多的组件,那么组件之间就需要一种“通讯方式”,这个就是状态了。不仅仅是传递数据,还可以实现事件总线。
vue3,你还为状态为何物而发愁吗?(一)