国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue 組件化: 計(jì)算屬性、內(nèi)容分發(fā)、自定義事件

這篇具有很好參考價(jià)值的文章主要介紹了Vue 組件化: 計(jì)算屬性、內(nèi)容分發(fā)、自定義事件。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

1. 計(jì)算屬性

1.1 計(jì)算屬性的特點(diǎn)

2. 內(nèi)容分發(fā)

2.1?使用插槽的示例

3. 自定義事件


1. 計(jì)算屬性

什么是計(jì)算屬性 ?

計(jì)算屬性的重點(diǎn)突出在屬性兩字, 首先它是個(gè)屬性, 其次這個(gè)屬性有計(jì)算的能力, 這里的計(jì)算就是個(gè)函數(shù); 簡(jiǎn)單來(lái)說(shuō), 它就是一個(gè)能夠?qū)⒂?jì)算結(jié)果緩存起來(lái)的屬性 (將行為轉(zhuǎn)化成了靜態(tài)的屬性), 僅此而已; 可以想象為緩存!

代碼示例 :?

<div id="app">
  <p>currentTime1: {{currentTime1()}}</p>
  <p>currentTime2: {{currentTime2}}</p>
</div>

<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js">
</script>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
          msg: "hello vue"
        },
        methods: {
          currentTime1: function() {
            return Date.now(); // 返回一個(gè)時(shí)間戳
          }
        },
        computed: { // 計(jì)算屬性 注意: methods, computed 方法不能重名, 重名之后只會(huì)調(diào)用 methods 方法
          currentTime2: function() {
            return Date.now();  // 返回一個(gè)時(shí)間戳
          }
        }
    });
</script>

說(shuō)明:

  • methods : 定義方法, 調(diào)用方法使用 currentTime1(), 需要帶括號(hào);
  • computed :?定義計(jì)算屬性, 調(diào)用屬性使用 currentTime2, 不需要帶括號(hào);?

【注意】methods 和 computed 中的方法不能重名

如果二者方法重名了, 就只會(huì)調(diào)用到 methods? 中的方法.? 請(qǐng)看如下示例?:?

Vue 組件化: 計(jì)算屬性、內(nèi)容分發(fā)、自定義事件

訪問(wèn)頁(yè)面 :?

?Vue 組件化: 計(jì)算屬性、內(nèi)容分發(fā)、自定義事件

1.1 計(jì)算屬性的特點(diǎn)

針對(duì)上述代碼示例, 對(duì)比調(diào)用?methods 和 computed 方法的變化 :?

1. 控制臺(tái)調(diào)用 methods 中的方法 :?

每次調(diào)用 currentTime1, 時(shí)間戳都會(huì)發(fā)生改變.

Vue 組件化: 計(jì)算屬性、內(nèi)容分發(fā)、自定義事件

2. 控制臺(tái)調(diào)用 computed 中的方法 :?

每次調(diào)用 currentTime2, 時(shí)間戳不會(huì)發(fā)生變化. 計(jì)算出來(lái)的結(jié)果被緩存在內(nèi)存中了.

Vue 組件化: 計(jì)算屬性、內(nèi)容分發(fā)、自定義事件

【注意變化】

此時(shí)我在?computed 中調(diào)用一下 data 中的 msg 數(shù)據(jù), 并在控制臺(tái)中不斷調(diào)用 computed 中的currentTime2 過(guò)程中, 突然修改一下 msg 的值, 再去調(diào)用 currentTime2, 此時(shí)觀察變化 :

Vue 組件化: 計(jì)算屬性、內(nèi)容分發(fā)、自定義事件

當(dāng) computed 中其他數(shù)據(jù)刷新時(shí), currentTime2 的時(shí)間戳就會(huì)重新計(jì)算, 這個(gè)和緩存一模一樣.?

【結(jié)論】

調(diào)用方法時(shí), 每次都需要進(jìn)行計(jì)算, 既然有計(jì)算過(guò)程則必定產(chǎn)生系統(tǒng)開(kāi)銷, 那如果這個(gè)結(jié)果是不經(jīng)常變化的的呢 ? 此時(shí)就可以考慮將這個(gè)結(jié)果緩存起來(lái), 采用計(jì)算屬性可以很方便的做到這一點(diǎn), 計(jì)算屬性的主要特征就是為了將經(jīng)常變化的計(jì)算結(jié)果進(jìn)行緩存, 以節(jié)約我們的系統(tǒng)開(kāi)銷;?

2. 內(nèi)容分發(fā)

在 Vue.js 中我們使用 <slot> 元素作為承載分發(fā)內(nèi)容的出口, 作者稱其為 "插槽", 可以應(yīng)用在組合組件的場(chǎng)景中.

為什么需要插槽 ? 比如當(dāng)我們遇到以下場(chǎng)景時(shí) :?

<div id="app">
    <p>列表書(shū)籍</p>
    <ul>
        <li>Java</li>
        <li>Linux</li>
        <li>Python</li>
    </ul>
</div>

按照原先的方式, 我們想要拿到 li 中的所有數(shù)據(jù), 就得遍歷 ul, 可現(xiàn)在 ul 里面隔了 li , 此時(shí)再按照之前的方式遍歷就會(huì)出問(wèn)題, 于是就需要使用到 "插槽" 來(lái)解決

2.1?使用插槽的示例

準(zhǔn)備一個(gè)待辦事項(xiàng)組件 (todo), 該組件由待辦標(biāo)題 (todo-title) 和待辦內(nèi)容 (todo-items) 組成, 但是這三個(gè)組件又是互相獨(dú)立的, 如何使用插槽來(lái)實(shí)現(xiàn) ??

1. 定義一個(gè)待辦事項(xiàng)的組件 :?

<div id="app">
    <todo>
    </todo>
</div>

<script>
    Vue.component("todo",{
        template: '<div>\
                        <div>列表書(shū)籍</div>\
                        <ul>\
                            <li>Java</li>\
                        </ul>\
                    </div>'
    });
</script>

2. 讓待辦事項(xiàng)的標(biāo)題和值實(shí)現(xiàn)動(dòng)態(tài)綁定. 我們給上面的待辦事項(xiàng)的標(biāo)題和值都留出一個(gè)插槽.? <slot> 標(biāo)簽

<div id="app">
    <todo>
    </todo>
</div>

<script>
    Vue.component("todo",{
        template: '<div>\
                        <slot name="todo-title"></slot>\
                        <ul>\
                            <slot name="todo-items"></slot>\
                        </ul>\
                    </div>'
    });
</script>

3. 定義?todo-title 的待辦標(biāo)題組件和 todo-items 的待辦內(nèi)容組件.

// 待辦標(biāo)題組件
Vue.component("todo-title",{
    props: ['title'],
    template: '<div>{{title}}</div>'
});
// 待辦內(nèi)容組件
Vue.component("todo-items",{
    props: ['item','index'],
    template: '<li>{{index}}--{{item}}</li>'
});

4. 實(shí)例化 Vue, 并初始化數(shù)據(jù)

var vm = new Vue({
    el: "#app",
    data: {
        title: "跟秦老師學(xué) Vue",
        todoItems: ['你好世界','毛毛學(xué)hadoop','毛毛學(xué)Linux']
    }

});

5. 將這些值通過(guò)插槽插入, 實(shí)現(xiàn)組合組件的內(nèi)容分發(fā).

<div id="app">
    <todo>
        <todo-title slot="todo-title" :title="title"></todo-title>
        <todo-items slot="todo-items" v-for="(item,index) in todoItems" 
            :item="item" :index="index"></todo-items>
    </todo>
</div>

瀏覽器訪問(wèn) :?

Vue 組件化: 計(jì)算屬性、內(nèi)容分發(fā)、自定義事件

?由此可見(jiàn), 插槽在組合組件中實(shí)現(xiàn)內(nèi)容分發(fā)起了關(guān)鍵作用.?

3. 自定義事件

既然 Vue 它是雙向綁定的, 那我們?nèi)绾吾槍?duì)上述內(nèi)容分發(fā)的示例, 實(shí)現(xiàn)動(dòng)態(tài)的刪除呢 ??

Vue 組件化: 計(jì)算屬性、內(nèi)容分發(fā)、自定義事件

?分別在 todo-items 組件和 vm 實(shí)例中增加刪除方法 :?

Vue.component("todo-items",{
    props: ['item','index'],
    // 只能綁定當(dāng)前組件的方法
    template: '<li>{{index}}---{{item}} <button @click="remove">刪除</button></li>',
    methods: {
        remove: function() {
            alert("刪除成功!");
        }
    }
});

var vm = new Vue({
    el: "#app",
    data: {
        title: "秦老師說(shuō) Vue",
        todoItems: ['你好世界','毛毛學(xué)hadoop','毛毛學(xué)Linux']
    },
    methods: {
        removeItems: function (index) {
            this.todoItems.splice(index,1);
        }
    }
});

? ? ? ?但是現(xiàn)在問(wèn)題是, todo-items 組件中無(wú)法綁定 vue 實(shí)例中的方法, 一旦我把 @click="remove" 寫(xiě)成 @click="removeItems", 訪問(wèn)頁(yè)面的時(shí)候, 就會(huì)報(bào)?removeItems 未定義的錯(cuò)誤.??

? ? ? 于是 Vue 就為我們提供了自定義事件的功能幫助我們解決這個(gè)問(wèn)題 ,?

使用 this.$emit("自定義事件名", 參數(shù)), 具體操作如下 :?

1. View 層模板綁定 Vue 實(shí)例中的方法

<div id="app">
    <todo>
        <todo-title slot="todo-title" :title="title"></todo-title>
        <todo-items slot="todo-items" v-for="(item,index) in todoItems" 
            :item="item" :index="index" v-on:remove="removeItems(index)"></todo-items>
    </todo>
</div>

2. todo-Items 組件中使用 this.$emit() 綁定 view 模板中的自定義事件

Vue.component("todo-items",{
    props: ['item','index'],
    // 只能綁定當(dāng)前組件的方法
    template: '<li>{{index}}---{{item}} <button @click="remove">刪除</button></li>',
    methods: {
        // this.$emit 自定義事件分發(fā)
        remove: function(index) {
            this.$emit('remove',index);
        }
    }
});

此時(shí)就能動(dòng)態(tài)的對(duì)數(shù)據(jù)進(jìn)行刪除了.

自定義事件原理圖 :?

Vue 組件化: 計(jì)算屬性、內(nèi)容分發(fā)、自定義事件文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-477921.html


到了這里,關(guān)于Vue 組件化: 計(jì)算屬性、內(nèi)容分發(fā)、自定義事件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 二、Vue組件化編程

    二、Vue組件化編程

    Vue 中使用組件的三大步驟: 定義組件(創(chuàng)建組件) 注冊(cè)組件 使用組件(寫(xiě)組件標(biāo)簽) 如何定義一個(gè)組件? 使用 Vue.extend(options) 創(chuàng)建,其中 options 和 new Vue(options) 時(shí)傳入的那個(gè) options 幾乎一樣,但也有點(diǎn)區(qū)別; 區(qū)別如下: el 不要寫(xiě),為什么? ——— 最終所有的組件都要經(jīng)過(guò)一

    2024年02月22日
    瀏覽(18)
  • 通用vue組件化登錄頁(yè)面

    通用vue組件化登錄頁(yè)面

    1.首先建立一個(gè)login文件夾,在里面建立對(duì)應(yīng)的login.vue文件 2.設(shè)置登錄頁(yè)面的背景圖,在App.vue文件中使用router-view進(jìn)行展示登錄組件 3.先給App.vue的div元素設(shè)置高度100%,之后在login.vue里面去設(shè)置背景圖 這里注意怎么使login組件垂直水平居中的樣式 1.首先建立一個(gè)cpns的文件夾,里

    2024年02月09日
    瀏覽(26)
  • 【Vue】Vite 組件化開(kāi)發(fā)

    【Vue】Vite 組件化開(kāi)發(fā)

    1. 什么是組件化開(kāi)發(fā) 組件化開(kāi)發(fā)指的是:根據(jù)封裝的思想,把頁(yè)面上可重用的部分封裝為組件,從而方便項(xiàng)目的開(kāi)發(fā)和維護(hù)。 例如:https://gitee.com/vdpadmin/variant-form 所展示的效果,就契合了組件化開(kāi)發(fā)的思想。用戶可以通過(guò)拖拽組件的方式,快速生成一個(gè)頁(yè)面的布局結(jié)構(gòu)。

    2024年02月10日
    瀏覽(22)
  • 通用vue組件化展示列表數(shù)據(jù)

    通用vue組件化展示列表數(shù)據(jù)

    1.首先先確定要展示的表格列名以及拿到所需要展示的數(shù)組數(shù)據(jù) 2.然后建立一個(gè)專門(mén)放el-table遍歷的文件 3.在父組件中將數(shù)據(jù)列表數(shù)據(jù)存放在listData里面,然后傳給子組件,子組件定義一個(gè)動(dòng)態(tài)的列,通過(guò)遍歷propList得到列名,然后也動(dòng)態(tài)匹配prop,這樣prop的值會(huì)去和listData進(jìn)行匹

    2023年04月08日
    瀏覽(25)
  • Vue開(kāi)發(fā)實(shí)戰(zhàn)(03)-組件化開(kāi)發(fā)

    Vue開(kāi)發(fā)實(shí)戰(zhàn)(03)-組件化開(kāi)發(fā)

    對(duì)組件功能的封裝,可以像搭積木一樣開(kāi)發(fā)網(wǎng)頁(yè)。 Vue官方的示例圖對(duì)組件化開(kāi)發(fā)的形象展示。左邊是一個(gè)網(wǎng)頁(yè),可以按照功能模塊抽象成很多組件,這些組件就像積木一樣拼接成網(wǎng)頁(yè)。 [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-aS7Zk8tp-16862

    2024年02月08日
    瀏覽(20)
  • Vue 如何簡(jiǎn)單快速組件化

    Vue 如何簡(jiǎn)單快速組件化

    為了簡(jiǎn)化拆分復(fù)雜的代碼邏輯,和實(shí)現(xiàn)代碼的組件化,封閉化。我們需要使用組件化的方法。我這里只講解我感覺(jué)最優(yōu)的組件化方法。 vue組件化總結(jié) vue 單文件組件 子組件修改Props報(bào)錯(cuò) vue 父組件調(diào)用子組件方法ref vue中組件的props屬性(詳) 使用Vue-cil搭建一個(gè)簡(jiǎn)單的Vue頁(yè)面,

    2024年02月12日
    瀏覽(19)
  • vue~el-autocomplete實(shí)現(xiàn)組件化

    vue~el-autocomplete實(shí)現(xiàn)組件化

    可以實(shí)現(xiàn)異步的數(shù)據(jù)拉取,從異步返回的數(shù)據(jù)中,選擇需要的結(jié)果,并回顯到文本框中。 回調(diào)列表,異步的方式獲取數(shù)據(jù)列表,顯示在列表框中 當(dāng)選中某一項(xiàng)時(shí),會(huì)觸發(fā)這個(gè)方法,將數(shù)據(jù)獲取到,這時(shí),我們可以將數(shù)據(jù)回顯,或者賦值給父頁(yè)面上的元素,如果希望賦值父頁(yè)

    2024年02月11日
    瀏覽(18)
  • Vue學(xué)習(xí)Day3——生命周期\組件化

    Vue學(xué)習(xí)Day3——生命周期\組件化

    Vue生命周期:就是一個(gè)Vue實(shí)例從 創(chuàng)建 到 銷毀 的整個(gè)過(guò)程。 生命周期四個(gè)階段:① 創(chuàng)建 ② 掛載 ③ 更新 ④ 銷毀 1.創(chuàng)建階段:創(chuàng)建響應(yīng)式數(shù)據(jù) 2.掛載階段:渲染模板 3.更新階段:修改數(shù)據(jù),更新視圖 4.銷毀階段:銷毀Vue實(shí)例 Vue生命周期過(guò)程中,會(huì) 自動(dòng)運(yùn)行一些函數(shù) ,被稱

    2024年02月15日
    瀏覽(28)
  • 【vue3】10-vue組件化額外知識(shí)補(bǔ)充(下)-動(dòng)態(tài)組件-組件緩存-v-model在組件上的應(yīng)用

    【vue3】10-vue組件化額外知識(shí)補(bǔ)充(下)-動(dòng)態(tài)組件-組件緩存-v-model在組件上的應(yīng)用

    切換組件案例: 比如我們現(xiàn)在想要實(shí)現(xiàn)了一個(gè)功能: 點(diǎn)擊一個(gè)tab-bar,切換不同的組件顯示; 這個(gè)案例我們可以通過(guò)兩種不同的實(shí)現(xiàn)思路來(lái)實(shí)現(xiàn): 方式一 :通過(guò)v-if來(lái)判斷,顯示不同的組件; 方式二 :動(dòng)態(tài)組件的方式; 方式一代碼示例: 動(dòng)態(tài)組件方式實(shí)現(xiàn) 動(dòng)態(tài)組件是使用 component組

    2024年02月08日
    瀏覽(20)
  • Vue:將以往的JQ頁(yè)面,重構(gòu)成Vue組件頁(yè)面的大致思路梳理(組件化編碼大致流程)

    Vue:將以往的JQ頁(yè)面,重構(gòu)成Vue組件頁(yè)面的大致思路梳理(組件化編碼大致流程)

    組件要按照功能點(diǎn)拆分,命名不要與 HTML元 素沖突。 1、根據(jù) UI 提供的原型圖,進(jìn)行結(jié)構(gòu)設(shè)計(jì),結(jié)構(gòu)設(shè)計(jì)的粒度以是否方便給組件起名字為依據(jù)。并梳理好對(duì)應(yīng)組件的層級(jí)依賴關(guān)系。 2、設(shè)計(jì)好結(jié)構(gòu)后,開(kāi)始寫(xiě)對(duì)應(yīng)的組件,并根據(jù)梳理好的層級(jí)關(guān)系,對(duì)應(yīng)引入組件。 3、根據(jù)

    2024年01月15日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包