欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue5中的事件修飾符(style)和template

 更新時間:2022年04月15日 11:50:37   作者:pick豆子  
這篇文章主要介紹了vue5中的事件修飾符(style)和template,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

事件修飾符

  • 在事件處理程序中調(diào)用 event.preventDefault() 或 event.stopPropagation() 是非常常見的需求。
  • Vue 不推薦我們操作DOM 為了解決這個問題,Vue.js 為 v-on 提供了事件修飾符
  • 修飾符是由點(diǎn)開頭的指令后綴來表示的
<!-- 阻止單擊事件繼續(xù)傳播 -->
<a v-on:click.stop="doThis"></a>
<!-- 提交事件不再重載頁面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修飾符可以串聯(lián) ? 即阻止冒泡也阻止默認(rèn)事件 -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只當(dāng)在 event.target 是當(dāng)前元素自身時觸發(fā)處理函數(shù) -->
<!-- 即事件不是從內(nèi)部元素觸發(fā)的 -->
<div v-on:click.self="doThat">...</div>

使用修飾符時,順序很重要;相應(yīng)的代碼會以同樣的順序產(chǎn)生。

因此,用 v-on:click.prevent.self 會阻止所有的點(diǎn)擊,而 v-on:click.self.prevent 只會阻止對元素自身的點(diǎn)擊。

按鍵修飾符

  • 在做項(xiàng)目中有時會用到鍵盤事件,在監(jiān)聽鍵盤事件時,我們經(jīng)常需要檢查詳細(xì)的按鍵。Vue 允許為 v-on 在監(jiān)聽鍵盤事件時添加按鍵修飾符
<!-- 只有在 `keyCode` 是 13 時調(diào)用 `vm.submit()` -->
<input v-on:keyup.13="submit">
<!-- -當(dāng)點(diǎn)擊enter 時調(diào)用 `vm.submit()` -->
<input v-on:keyup.enter="submit">
<!--當(dāng)點(diǎn)擊enter或者space時 ?時調(diào)用 `vm.alertMe()` ? -->
<input type="text" v-on:keyup.enter.space="alertMe" >

常用的按鍵修飾符

  • .enter =>    enter鍵
  • .tab => tab鍵
  • .delete (捕獲“刪除”和“退格”按鍵) =>  刪除鍵
  • .esc => 取消鍵
  • .space =>  空格鍵
  • .up =>  上
  • .down =>  下
  • .left =>  左
  • .right =>  右
<script>
?? ?var vm = new Vue({
? ? ? ? el:"#app",
? ? ? ? methods: {
? ? ? ? ? ? ? submit:function(){},
? ? ? ? ? ? ? alertMe:function(){},
? ? ? ? }
? ? })
</script>

自定義按鍵修飾符別名

在Vue中可以通過config.keyCodes自定義按鍵修飾符別名

<div id="app">
? ? 預(yù)先定義了keycode 116(即F5)的別名為f5,因此在文字輸入框中按下F5,會觸發(fā)prompt方法
? ? <input type="text" v-on:keydown.f5="prompt()">
</div>
<script>
?? ?
? ? Vue.config.keyCodes.f5 = 116;
? ? let app = new Vue({
? ? ? ? el: '#app',
? ? ? ? methods: {
? ? ? ? ? ? prompt: function() {
? ? ? ? ? ? ? ? alert('我是 F5!');
? ? ? ? ? ? }
? ? ? ? }
? ? });
</script>

綁定style

?<div v-bind:style="styleObject">綁定樣式對象</div>'
?
<!-- CSS 屬性名可以用駝峰式 (camelCase) 或短橫線分隔 (kebab-case,記得用單引號括起來) ? ?-->
?<div v-bind:style="{ color: activeColor, fontSize: fontSize,background:'red' }">內(nèi)聯(lián)樣式</div>
<!--組語法可以將多個樣式對象應(yīng)用到同一個元素 -->
<div v-bind:style="[styleObj1, styleObj2]"></div>
<script>
?? ?new Vue({
? ? ? el: '#app',
? ? ? data: {
? ? ? ? styleObject: {
? ? ? ? ? color: 'green',
? ? ? ? ? fontSize: '30px',
? ? ? ? ? background:'red'
? ? ? ? },
? ? ? ? activeColor: 'green',
? ??? ??? ?fontSize: "30px"
? ? ? },
? ? ? styleObj1: {
? ? ? ? ? ? ?color: 'red'
? ? ? ?},
? ? ? ?styleObj2: {
? ? ? ? ? ? fontSize: '30px'
? ? ? ?}
</script>

template

可以用template替換div(因?yàn)閐iv是空的,不起作用)。這樣控制臺中不會顯示div容器了。

<template v-for="(user,index) in users">
? ?<h1></h2>
</template>
//代替
<div>
? ?<h1></h2>
</div>

組件

  • 組件 (Component) 是 Vue.js 最強(qiáng)大的功能之一
  • 組件可以擴(kuò)展 HTML 元素,封裝可重用的代

組件注冊

全局注冊

  • Vue.component(‘組件名稱’, { }) 第1個參數(shù)是標(biāo)簽名稱,第2個參數(shù)是一個選項(xiàng)對象
  • 全局組件注冊后,任何vue實(shí)例都可以用

組件基礎(chǔ)用

<div id="example">
? <!-- 2、 組件使用 組件名稱 是以HTML標(biāo)簽的形式使用 ?--> ?
? <my-component></my-component>
</div>
<script>
? ? // ? 注冊組件?
? ? // 1、 my-component 就是組件中自定義的標(biāo)簽名
?? ?Vue.component('my-component', {
? ? ? template: '<div>A custom component!</div>'
? ? })
? ? // 創(chuàng)建根實(shí)例
? ? new Vue({
? ? ? el: '#example'
? ? })
</script>

組件注意事項(xiàng)

  • 組件參數(shù)的data值必須是函數(shù)同時這個函數(shù)要求返回一個對象
  • 組件模板必須是單個根元素
  • 組件模板的內(nèi)容可以是模板字符串
? <div id="app">
? ? ?<!--?
?? ??? ?4、 ?組件可以重復(fù)使用多次?
?? ? ? ? ?因?yàn)閐ata中返回的是一個對象所以每個組件中的數(shù)據(jù)是私有的
?? ??? ? ?即每個實(shí)例可以維護(hù)一份被返回對象的獨(dú)立的拷貝 ??
?? ?-->?
? ? <button-counter></button-counter>
? ? <button-counter></button-counter>
? ? <button-counter></button-counter>
? ? ? <!-- 8、必須使用短橫線的方式使用組件 -->
? ? ?<hello-world></hello-world>
? </div>
<script type="text/javascript">
?? ?//5 ?如果使用駝峰式命名組件,那么在使用組件的時候,只能在字符串模板中用駝峰的方式使用組件,
? ? // 7、但是在普通的標(biāo)簽?zāi)0逯?,必須使用短橫線的方式使用組件
? ? ?Vue.component('HelloWorld', {
? ? ? data: function(){
? ? ? ? return {
? ? ? ? ? msg: 'HelloWorld'
? ? ? ? }
? ? ? },
? ? ? template: '<div>{{msg}}</div>'
? ? });
? ??
? ? Vue.component('button-counter', {
? ? ? // 1、組件參數(shù)的data值必須是函數(shù)?
? ? ? // 同時這個函數(shù)要求返回一個對象 ?
? ? ? data: function(){
? ? ? ? return {
? ? ? ? ? count: 0
? ? ? ? }
? ? ? },
? ? ? // ?2、組件模板必須是單個根元素
? ? ? // ?3、組件模板的內(nèi)容可以是模板字符串 ?
? ? ? template: `
? ? ? ? <div>
? ? ? ? ? <button @click="handle">點(diǎn)擊了{(lán){count}}次</button>
? ? ? ? ? <button>測試123</button>
?? ??? ??? ?# ?6 在字符串模板中可以使用駝峰的方式使用組件?? ?
?? ??? ? ? <HelloWorld></HelloWorld>
? ? ? ? </div>
? ? ? `,
? ? ? methods: {
? ? ? ? handle: function(){
? ? ? ? ? this.count += 2;
? ? ? ? }
? ? ? }
? ? })
? ? var vm = new Vue({
? ? ? el: '#app',
? ? ? data: {
? ? ? ??
? ? ? }
? ? });
? </script>

局部注冊

  • 只能在當(dāng)前注冊它的vue實(shí)例中使用
? <div id="app">
? ? ? <my-component></my-component>
? </div>
<script>
? ? // 定義組件的模板
? ? var Child = {
? ? ? template: '<div>A custom component!</div>'
? ? }
? ? new Vue({
? ? ? //局部注冊組件 ?
? ? ? components: {
? ? ? ? // <my-component> 將只在父模板可用 ?一定要在實(shí)例上注冊了才能在html文件中使用
? ? ? ? 'my-component': Child
? ? ? }
? ? })
?</script>

Vue 調(diào)試工具

Vue組件之間傳值

父組件向子組件傳值

  • 父組件發(fā)送的形式是以屬性的形式綁定值到子組件身上。
  • 然后子組件用屬性props接收
  • 在props中使用駝峰形式,模板中需要使用短橫線的形式字符串形式的模板中沒有這個限制
? <div id="app">
? ? <div>{{pmsg}}</div>
? ? ?<!--1、menu-item ?在 APP中嵌套著 故 menu-item ? 為 ?子組件 ? ? ?-->
? ? ?<!-- 給子組件傳入一個靜態(tài)的值 -->
? ? <menu-item title='來自父組件的值'></menu-item>
? ? <!-- 2、 需要動態(tài)的數(shù)據(jù)的時候 需要屬性綁定的形式設(shè)置 此時 ptitle ?來自父組件data 中的數(shù)據(jù) .?
?? ??? ? ?傳的值可以是數(shù)字、對象、數(shù)組等等
?? ?-->
? ? <menu-item :title='ptitle' content='hello'></menu-item>
? </div>
? <script type="text/javascript">
? ? Vue.component('menu-item', {
? ? ? // 3、 子組件用屬性props接收父組件傳遞過來的數(shù)據(jù) ?
? ? ? props: ['title', 'content'],
? ? ? data: function() {
? ? ? ? return {
? ? ? ? ? msg: '子組件本身的數(shù)據(jù)'
? ? ? ? }
? ? ? },
? ? ? template: '<div>{{msg + "----" + title + "-----" + content}}</div>'
? ? });
? ? var vm = new Vue({
? ? ? el: '#app',
? ? ? data: {
? ? ? ? pmsg: '父組件中內(nèi)容',
? ? ? ? ptitle: '動態(tài)綁定屬性'
? ? ? }
? ? });
? </script>

子組件向父組件傳值

  • 子組件用$emit()觸發(fā)事件
  • $emit() 第一個參數(shù)為 自定義的事件名稱 第二個參數(shù)為需要傳遞的數(shù)據(jù)
  • 父組件用v-on 監(jiān)聽子組件的事件
?<div id="app">
? ? <div :style='{fontSize: fontSize + "px"}'>{{pmsg}}</div>
? ? ?<!-- 2 父組件用v-on 監(jiān)聽子組件的事件
?? ??? ?這里 enlarge-text ?是從 $emit 中的第一個參數(shù)對應(yīng) ? handle 為對應(yīng)的事件處理函數(shù)?? ?
?? ?-->?? ?
? ? <menu-item :parr='parr' @enlarge-text='handle($event)'></menu-item>
? </div>
? <script type="text/javascript" src="js/vue.js"></script>
? <script type="text/javascript">
? ? /*
? ? ? 子組件向父組件傳值-攜帶參數(shù)
? ? */
? ??
? ? Vue.component('menu-item', {
? ? ? props: ['parr'],
? ? ? template: `
? ? ? ? <div>
? ? ? ? ? <ul>
? ? ? ? ? ? <li :key='index' v-for='(item,index) in parr'>{{item}}</li>
? ? ? ? ? </ul>
?? ??? ??? ?### ?1、子組件用$emit()觸發(fā)事件
?? ??? ??? ?### 第一個參數(shù)為 自定義的事件名稱 ? 第二個參數(shù)為需要傳遞的數(shù)據(jù) ?
? ? ? ? ? <button @click='$emit("enlarge-text", 5)'>擴(kuò)大父組件中字體大小</button>
? ? ? ? ? <button @click='$emit("enlarge-text", 10)'>擴(kuò)大父組件中字體大小</button>
? ? ? ? </div>
? ? ? `
? ? });
? ? var vm = new Vue({
? ? ? el: '#app',
? ? ? data: {
? ? ? ? pmsg: '父組件中內(nèi)容',
? ? ? ? parr: ['apple','orange','banana'],
? ? ? ? fontSize: 10
? ? ? },
? ? ? methods: {
? ? ? ? handle: function(val){
? ? ? ? ? // 擴(kuò)大字體大小
? ? ? ? ? this.fontSize += val;
? ? ? ? }
? ? ? }
? ? });
? </script>

兄弟之間的傳遞

  • 兄弟之間傳遞數(shù)據(jù)需要借助于事件中心,通過事件中心傳遞數(shù)據(jù)
  • 提供事件中心 var hub = new Vue()
  • 傳遞數(shù)據(jù)方,通過一個事件觸發(fā)hub.$emit(方法名,傳遞的數(shù)據(jù))
  • 接收數(shù)據(jù)方,通過mounted(){} 鉤子中 觸發(fā)hub.$on()方法名
  • 銷毀事件 通過hub.$off()方法名銷毀之后無法進(jìn)行傳遞數(shù)據(jù)
?<div id="app">
? ? <div>父組件</div>
? ? <div>
? ? ? <button @click='handle'>銷毀事件</button>
? ? </div>
? ? <test-tom></test-tom>
? ? <test-jerry></test-jerry>
? </div>
? <script type="text/javascript" src="js/vue.js"></script>
? <script type="text/javascript">
? ? /*
? ? ? 兄弟組件之間數(shù)據(jù)傳遞
? ? */
? ? //1、 提供事件中心
? ? var hub = new Vue();
? ? Vue.component('test-tom', {
? ? ? data: function(){
? ? ? ? return {
? ? ? ? ? num: 0
? ? ? ? }
? ? ? },
? ? ? template: `
? ? ? ? <div>
? ? ? ? ? <div>TOM:{{num}}</div>
? ? ? ? ? <div>
? ? ? ? ? ? <button @click='handle'>點(diǎn)擊</button>
? ? ? ? ? </div>
? ? ? ? </div>
? ? ? `,
? ? ? methods: {
? ? ? ? handle: function(){
? ? ? ? ? //2、傳遞數(shù)據(jù)方,通過一個事件觸發(fā)hub.$emit(方法名,傳遞的數(shù)據(jù)) ? 觸發(fā)兄弟組件的事件
? ? ? ? ? hub.$emit('jerry-event', 2);
? ? ? ? }
? ? ? },
? ? ? mounted: function() {
? ? ? ?// 3、接收數(shù)據(jù)方,通過mounted(){} 鉤子中 ?觸發(fā)hub.$on(方法名
? ? ? ? hub.$on('tom-event', (val) => {
? ? ? ? ? this.num += val;
? ? ? ? });
? ? ? }
? ? });
? ? Vue.component('test-jerry', {
? ? ? data: function(){
? ? ? ? return {
? ? ? ? ? num: 0
? ? ? ? }
? ? ? },
? ? ? template: `
? ? ? ? <div>
? ? ? ? ? <div>JERRY:{{num}}</div>
? ? ? ? ? <div>
? ? ? ? ? ? <button @click='handle'>點(diǎn)擊</button>
? ? ? ? ? </div>
? ? ? ? </div>
? ? ? `,
? ? ? methods: {
? ? ? ? handle: function(){
? ? ? ? ? //2、傳遞數(shù)據(jù)方,通過一個事件觸發(fā)hub.$emit(方法名,傳遞的數(shù)據(jù)) ? 觸發(fā)兄弟組件的事件
? ? ? ? ? hub.$emit('tom-event', 1);
? ? ? ? }
? ? ? },
? ? ? mounted: function() {
? ? ? ? // 3、接收數(shù)據(jù)方,通過mounted(){} 鉤子中 ?觸發(fā)hub.$on()方法名
? ? ? ? hub.$on('jerry-event', (val) => {
? ? ? ? ? this.num += val;
? ? ? ? });
? ? ? }
? ? });
? ? var vm = new Vue({
? ? ? el: '#app',
? ? ? data: {
? ? ? ??
? ? ? },
? ? ? methods: {
? ? ? ? handle: function(){
? ? ? ? ? //4、銷毀事件 通過hub.$off()方法名銷毀之后無法進(jìn)行傳遞數(shù)據(jù) ?
? ? ? ? ? hub.$off('tom-event');
? ? ? ? ? hub.$off('jerry-event');
? ? ? ? }
? ? ? }
? ? });
? </script>

組件插槽

組件的最大特性就是復(fù)用性,而用好插槽能大大提高組件的可復(fù)用能力

匿名插槽

? <div id="app">
? ? <!-- 這里的所有組件標(biāo)簽中嵌套的內(nèi)容會替換掉slot ?如果不傳值 則使用 slot 中的默認(rèn)值 ?--> ?
? ? <alert-box>有bug發(fā)生</alert-box>
? ? <alert-box>有一個警告</alert-box>
? ? <alert-box></alert-box>
? </div>
? <script type="text/javascript">
? ? /*
? ? ? 組件插槽:父組件向子組件傳遞內(nèi)容
? ? */
? ? Vue.component('alert-box', {
? ? ? template: `
? ? ? ? <div>
? ? ? ? ? <strong>ERROR:</strong>
?? ??? ?# 當(dāng)組件渲染的時候,這個 <slot> 元素將會被替換為“組件標(biāo)簽中嵌套的內(nèi)容”。
?? ??? ?# 插槽內(nèi)可以包含任何模板代碼,包括 HTML
? ? ? ? ? <slot>默認(rèn)內(nèi)容</slot>
? ? ? ? </div>
? ? ? `
? ? });
? ? var vm = new Vue({
? ? ? el: '#app',
? ? ? data: {
? ? ? ??
? ? ? }
? ? });
? </script>

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • vue+freemarker中遇到的坑及解決

    vue+freemarker中遇到的坑及解決

    這篇文章主要介紹了vue+freemarker中遇到的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • typescript中this報(bào)錯的解決

    typescript中this報(bào)錯的解決

    這篇文章主要介紹了typescript中this報(bào)錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Vue?Canvas實(shí)現(xiàn)電子簽名

    Vue?Canvas實(shí)現(xiàn)電子簽名

    這篇文章主要為大家詳細(xì)介紹了Vue?Canvas實(shí)現(xiàn)電子簽名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • vue中自定義指令directive的詳細(xì)指南

    vue中自定義指令directive的詳細(xì)指南

    這篇文章主要給大家介紹了關(guān)于vue中自定義指令directive的相關(guān)資料,自定義指令解決的問題或者說使用場景是對普通 DOM 元素進(jìn)行底層操作,所以我們不能盲目的胡亂的使用自定義指令,需要的朋友可以參考下
    2021-09-09
  • vue:axios請求本地json路徑錯誤問題及解決

    vue:axios請求本地json路徑錯誤問題及解決

    這篇文章主要介紹了vue:axios請求本地json路徑錯誤問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue實(shí)現(xiàn)將時間戳轉(zhuǎn)換成日期格式

    vue實(shí)現(xiàn)將時間戳轉(zhuǎn)換成日期格式

    這篇文章主要介紹了vue實(shí)現(xiàn)將時間戳轉(zhuǎn)換成日期格式方式,具有很好的參考價值,希望對大家有所幫助,
    2023-10-10
  • Vue單文件組件基礎(chǔ)模板小結(jié)

    Vue單文件組件基礎(chǔ)模板小結(jié)

    本篇文章主要介紹了Vue單文件組件基礎(chǔ)模板小結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • vue3.0 項(xiàng)目搭建和使用流程

    vue3.0 項(xiàng)目搭建和使用流程

    這篇文章主要介紹了vue3.0 項(xiàng)目搭建和使用流程,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下
    2021-03-03
  • vue.js Router中嵌套路由的實(shí)用示例

    vue.js Router中嵌套路由的實(shí)用示例

    這篇文章主要給大家介紹了關(guān)于vue.js Router中嵌套路由的相關(guān)資料,所謂嵌套路由就是路由里面嵌套他的子路由,文章通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-06-06
  • vue3中的ref與reactive使用方法對比

    vue3中的ref與reactive使用方法對比

    Vue3 提供了兩個新的 API:ref 和 reactive,它們可以幫助我們更好地管理和處理響應(yīng)式數(shù)據(jù),這篇文章主要介紹了vue3中的ref與reactive的區(qū)別和使用方法,需要的朋友可以參考下
    2023-04-04

最新評論