Vue.js事件处理器&表单

本文介绍了Vue.js中事件处理器的使用,包括通过v-on调用JavaScript方法和内联语句,以及事件修饰符如.stop和.prevent。此外,还详细讲解了表单元素如输入框、复选框、单选按钮和select列表的v-model双向数据绑定,并提到了按键修饰符和各种事件处理细节。
摘要由CSDN通过智能技术生成

事件处理器

事件监听

使用方法来调用JavaScript方法

v-on 可以接收一个定义的方法来调用

<div id="app">
   <!-- `greet` 是在下面定义的方法名 -->
  <button v-on:click="greet">Greet</button>
</div>

<script>
	var app = new Vue({
	  el: '#app',
	  data: {
	    name: 'Vue.js'
	  },
	  // 在 `methods` 对象中定义方法
	  methods: {
	    greet: function (event) {
	      // `this` 在方法里指当前 Vue 实例
	      alert('Hello ' + this.name + '!')
	      // `event` 是原生 DOM 事件
		  if (event) {
			  alert(event.target.tagName)
		  }
	    }
	  }
	})
	// 也可以用 JavaScript 直接调用方法
	app.greet() // -> 'Hello Vue.js!'
</script>

也可以用内联 JavaScript 语句

<div id="app">
  <button v-on:click="say('hi')">Say hi</button>
  <button v-on:click="say('what')">Say what</button>
</div>
 
<script>
  new Vue({
	  el: '#app',
	  methods: {
	    say: function (message) {
	      alert(message)
	    }
	  }
	})
</script>

事件修饰符

为了处理 DOM 事件细节,如:event.preventDefault() 或 event.stopPropagation()。

Vue.js 通过由点 . 表示的指令后缀来调用修饰符

  • .stop - 阻止冒泡
  • .prevent - 阻止默认事件
  • .capture - 阻止捕获
  • .self - 只监听触发该元素的事件
  • .once - 只触发一次
  • .left - 左键事件
  • .right - 右键事件
  • .middle - 中间滚轮事件
<!-- 阻止单击事件冒泡 -->
<a v-on:click.stop="doThis"></a>
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联  -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>
<!-- 添加事件侦听器时使用事件捕获模式 -->
<div v-on:click.capture="doThis">...</div>
<!-- 只当事件在该元素本身(而不是子元素)触发时触发回调 -->
<div v-on:click.self="doThat">...</div>

<!-- click 事件只能点击一次,2.1.4版本新增 -->
<a v-on:click.once="doThis"></a>

按键修饰符

在监听键盘事件时添加按键修饰符

全部的按键别名:

  • .enter
  • .tab
  • .delete (捕获 “删除” 和 “退格” 键)
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right
  • .ctrl
  • .alt
  • .shift
  • .meta
<p><!-- Alt + C -->
<input @keyup.alt.67="clear">
<!-- Ctrl + Click -->
<div @click.ctrl="doSomething">Do something</div>

表单

使用v-model 指令在表单控件元素上创建双向数据绑定
v-model 会根据控件类型自动选取正确的方法来更新元素

输入框

input 和 textarea 元素中使用 v-model 实现双向数据绑定

<div id="app">
  <p>1)input 元素:<input v-model="message" placeholder="编辑我……"></p>
  <p>消息是: {{ message }}</p>
	
  <p>2)textarea 元素:<textarea v-model="message2" placeholder="多行文本输入……"></textarea></p>
  <p style="white-space: pre">{{ message2 }}</p>
</div>

<script>
	new Vue({
	  el: '#app',
	  data: {
	    message: 'Runoob',
		message2: '菜鸟教程\r\nhttp://www.runoob.com'
	  }
	})
</script>

复选框

分为单个或多个,
如果是一个为逻辑值,如果是多个则绑定到同一个数组

<div id="app">
  <p>单个复选框:</p>
  <input type="checkbox" id="checkbox" v-model="checked">
  <label for="checkbox">{{ checked }}</label>
    
  <p>多个复选框:</p>
  <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
  <label for="runoob">Runoob</label>
  <input type="checkbox" id="google" value="Google" v-model="checkedNames">
  <label for="google">Google</label>
  <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
  <label for="taobao">taobao</label>
  <br>
  <span>选择的值为: {{ checkedNames }}</span>
</div>
 
<script>
	new Vue({
	  el: '#app',
	  data: {
	    checked : false,
	    checkedNames: []
	  }
	})
</script>

单选按钮

<div id="app">
  <input type="radio" id="runoob" value="Runoob" v-model="picked">
  <label for="runoob">Runoob</label>
  <br>
  <input type="radio" id="google" value="Google" v-model="picked">
  <label for="google">Google</label>
  <br>
  <span>选中值为: {{ picked }}</span>
</div>
 
<script>
	new Vue({
	  el: '#app',
	  data: {
	    picked : 'Runoob'
	  }
	})
</script>

select列表

下拉列表示例

<div id="app">
  <select v-model="selected" name="fruit">
    <option value="">选择一个网站</option>
    <option value="www.runoob.com">Runoob</option>
    <option value="www.google.com">Google</option>
  </select>
 
  <div id="output">
      选择的网站是: {{selected}}
  </div>
</div>
 
<script>
	new Vue({
	  el: '#app',
	  data: {
	    selected: '' 
	  }
	})
</script>

修饰符

  • .lazy
    v-model 在 input 事件中同步输入框的值与数据,可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步
    <!-- 在 "change" 而不是 "input" 事件中更新 -->
    <input v-model.lazy="msg" >
    
  • .number
    如果想自动将用户的输入值转为 Number 类型(如果原值的转换结果为 NaN 则返回原值),可以添加一个修饰符 number 给 v-model 来处理输入值:
    <input v-model.number="age" type="number">
    在 type=“number” 时 HTML 中输入的值也总是会返回字符串类型
  • .trim
    自动过滤用户输入的首尾空格
    <input v-model.trim="msg">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值