Vue ベースのイベント メカニズム、イベント修飾子、双方向データ バインディング

目次

1. イベントメカニズム

2. イベント修飾子

3 つの双方向データ バインディング 


1. イベントメカニズム

Vue は v-on コマンドを使用して DOM イベントをリッスンし、トリガーされたときにいくつかの JavaScript コードを実行します. また、呼び出す必要があるメソッド名を受け取ることもできます.メソッドの event パラメータを介して$ネイティブ イベント オブジェクトを渡すことができます。他のパラメーターを渡すこともできます。v-on: イベント名を@event 名に短縮できます

<body>
	<div id="app">
		<!-- 直接运行一些 JavaScript 代码 -->
		<button v-on:click="console.log('我被点击了')">点击我</button>
		<!-- 接收一个需要调用的方法名称,即函数名,函数实现写在methods中 -->
		<button v-on:click="handler">点击我</button>
		<!-- 传递参数 -->
		<button v-on:click="handler1($event,'Hi')">点击我</button>
		<!-- 简写 -->
		<button @click="handler1($event,'Hi')">点击我</button>
	</div>
	<script>
		new Vue({
			el:"#app",
			methods:{
				handler(){
					console.log('hello vue');
				},
				handler1(e,n){
					console.log(e,n);
				}
			}
		})
	</script>
</body>

2. イベント修飾子

JavaScript イベント ハンドラーで event.preventDefault() または event.stopPropagation() を呼び出すことは、非常に一般的な要件です。Vue はより良い方法を提供します。イベント ハンドラーには純粋なデータ ロジックのみがあり、DOM イベントの詳細を処理する代わりに、これらの詳細はイベント修飾子によって完成されます。

一般的な修飾子は次のとおりです。

.stopイベントのバブリングを停止

.prevent は、イベントのデフォルトの動作を防ぎます

.capture は、イベント キャプチャ フェーズ中にイベント処理関数を実行します。

.self は、 event.target が現在の要素自体である場合にのみハンドラーをトリガーします

.onceイベント ハンドラーは 1 回実行され、バインドが解除されます。

The default behavior of the .passive scrolling event (つまり、スクロール動作) は、すぐにトリガーされます. 通常、モバイル端末のパフォーマンスを向上させるために、スクロールと組み合わせて使用​​されます (イベントが発生するたびに、ブラウザーがチェックするため)イベントのデフォルト アクションを防ぐための preventDefault があるかどうか..passive を追加して、ブラウザーにクエリの必要がないことを伝え、デフォルト アクションを防ぐために preventDefault を使用しません.パッシブであり、競合を防止することはできません同時にリスナーにバインドされます。 )

キー修飾子 (通常、keyup イベント タイプと組み合わせて使用​​されます):

.enter.tab.delete.esc.space.up.down.left.right  、.ctrl.alt.shift.meta

マウス修飾子 (mouseup イベント):

.左.右.中

<style>
	.outer{
		width: 400px;
		height: 400px;
		background-color: rgb(233, 47, 202);
		display: flex;
		justify-content: center;
		align-items: center;
	}
	.outer1{
		overflow: scroll;
		height: 100px;
	}
	.inner{
		width: 200px;
		height: 200px;
		background-color: rgb(237, 143, 20);
	}
</style>
</head>
<body>
	<div id="app">
		<!-- 按下回车执行 enter 或者 13 (13表示回车键)-->
		<!-- <input type="text" @keyup.enter="console.log('键盘按下了')"> -->
		<input type="text" @keyup.13="console.log('键盘按下了')">
		<!-- 按下鼠标执行 mouseup middle 中间滚轮 left right -->
		<input type="text" @mouseup.middle="console.log('鼠标按下了')">
		<br>-------------------------------------------------------
		<!-- .stop 阻止事件冒泡 -->
		<div class="outer" @click="outer">
			<div class="inner" @click.stop="inner">stop 阻止事件冒泡</div>
		</div>
		<br>-------------------------------------------------------
		<!-- .captrue 事件捕获阶段执行 -->
		<div class="outer" @click.capture="outer">
			<div class="inner" @click="inner">.captrue 事件捕获阶段执行</div>
		</div>
		<!-- 阻止事件的默认行为 prevent -->
		<a @click.prevent="toJump" href="https://www.baidu.com">百度一下</a>
		<!-- 事件修饰符 passive 一般与scroll连用 表示直接使用事件默认行为-->
		<div class="outer outer1" @scroll="outer">
			<div class="inner" @click="inner"></div>
		</div>
	</div>
	<script>
		new Vue({
			el:"#app",
			data:{
			},
			methods:{
				outer(){
					console.log('outer被点击了');
				},
				inner(event){
					console.log('inner被点击了');
					// 原生阻止事件冒泡
					// event.stopPropagation()
				},
				toJump(event){
					// 原生阻止事件默认行为
					// event.preventDefault()
				}
			}
		})
	</script>
</body>

3 つの双方向データ バインディング 

双方向のデータ バインディングは、<input>フォーム上、およびv-model ディレクティブを持つ要素<textarea>上で作成できますコントロールの種類に基づいて、要素を更新するための正しい方法が自動的に選択されます。その魔法にもかかわらず、v-model は本質的には構文糖衣にすぎません。ユーザー入力イベントをリッスンしてデータを更新し、いくつかの極端なシナリオに対して特別な処理を実行します。v-model を使用して値をバインドする場合、name 属性を記述する必要はありません。<select>

<body>
	<div id="app">
		<!-- v-model  数据改变 v-model 视图也会更新-->
		{
   
   {stu}}
		<!-- lazy修饰符 懒加载,按下回车后才更新数据 -->
		<!-- 用户名: <input type="text" v-model.lazy="stu.username"> -->
		<!-- trim修饰符 去除前后空格 -->
		<br>
		<br>
		用户名: <input type="text" v-model.trim="stu.username">
		<!-- number修饰符 将输入的值转成数字类型-->
		密码: <input type="password" v-model.number="stu.password">
		<!-- 单选按钮 -->
		<br>
		男:<input type="radio" value="male" v-model="stu.gender">
		女:<input type="radio" value="female" v-model="stu.gender">
		<br>
		<!-- 复选框 -->
		游泳<input type="checkbox" value="swimming" v-model="stu.hobbies">
		篮球<input type="checkbox" value="basketball"  v-model="stu.hobbies">
		足球<input type="checkbox" value="football" v-model="stu.hobbies">
		<br>
		<!-- 多行文本框 -->
		<textarea v-model="stu.introduce"></textarea>
		<br>
		<!-- 下拉框 -->
		<select v-model="stu.city">
			<option value="beijing">北京</option>
			<option value="shanghai">上海</option>
			<option value="liuzhou">柳州</option>
		</select>
	</div>
	<script>
		new Vue({
			el:"#app",
			data:{
				// 表单对象 
				stu:{
					hobbies:[]
				}
			},
			methods:{}
		})
	</script>
</body>

おすすめ

転載: blog.csdn.net/lq313131/article/details/127016805