vue(4)—— vue的過濾器,監聽屬性,生命周期函數,獲取DOM元素

来源:https://www.cnblogs.com/yangva/archive/2019/03/20/10566759.html
-Advertisement-
Play Games

過濾器 vue允許自定義過濾器,我個人認為,過濾器有兩種,一種是對數據的清洗過濾,一種是對數據切換的動畫過濾 數據切換的動畫過濾 這裡還是利用前面的動態組件的例 ...


過濾器

vue允許自定義過濾器,我個人認為,過濾器有兩種,一種是對數據的清洗過濾,一種是對數據切換的動畫過濾

 

數據切換的動畫過濾

這裡還是利用前面的動態組件的例子:

 

 

這裡由於沒辦法展示動畫效果,代碼如下,自己體會吧:

 

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>

    <style>
        .v-enter, .v-leave-to{
            transform: translateX(10px);
            opacity: 0;
        }
        .v-enter-active,.v-leave-active {
            transition: all .5s ease;
        }        
    </style>
</head>
<body>
    <div id="app">
        <a href='' @click.prevent='Name="Vheader"'>頭部</a>
        <a href='' @click.prevent='Name="Vfooter"'>底部</a>
        <transition mode='out-in'>
            <component :is="Name"></component>
        </transition>
    </div>
    <!--你的vue模塊路徑-->
    <script type="text/javascript" src="./node_modules/vue/dist/vue.min.js"></script>
    <script>
        Vue.component('Vheader', {
            template: '<div>頭部內容</div>'
        })
        Vue.component('Vfooter', {
            template: '<div>底部內容</div>'
        })
        let app = new Vue({
            el: '#app',
            data: {  Name: ''},
        })
    </script>
</body>

</html>
動畫過濾

 

其中transition是vue自帶的動畫組件,相關參數及說明:

 

並且會自帶有這些css參數:

 

更詳細的說明參見:官方文檔

 

對數據的清洗過濾

 

什麼意思呢?如果你沒看明白,來,直接看個例子,相信你就能看懂了

 

這個過濾器,如果你是用過Python的django框架的朋友,應該很熟悉,django裡面模板文件里也有個這種過濾器

 

全局過濾器

 當然也有全局的過濾器,這個就跟前面的組件很像了

 

 

監聽屬性

 

監聽屬性一共有兩種,都是作為監聽數據的

 

計算屬性

模板內的表達式非常便利,但是設計它們的初衷是用於簡單運算的。因為在模板中放入太多的邏輯會讓模板過重且難以維護

 計算屬性預設是get,即獲取值,當然也可以修改值,先看看get類型的:

 

最開始msg是test,然後computed屬性內的就是計算屬性,此時的是changestr,將值渲染到p標簽上,當點擊button元素原始的監聽事件點擊修改了msg的值後,計算屬性changstr獲取到新的值,立馬做出反應,然後重新渲染到p標簽上

 

set方式:

 

 

這裡可能不太好理解

 

步驟:

  • 1.預設渲染出msg為test的
  • 2.計算屬性changestr觸發get方法
  • 3.渲染到p標簽
  • 4.click點擊
  • 5.綁定方法修改msg的值
  • 6.計算屬性changestr觸發set方法,修改值
  • 7.計算屬性實時監聽發現msg值修改,重新get值
  • 8.渲染到p標簽

 

如果需要設置值的話,就需要如上分開寫計算屬性,是不是感覺有點像在寫後端的api介面啊,哈哈 

 

偵聽器

雖然計算屬性在大多數情況下更合適,但有時也需要一個自定義的偵聽器。這就是為什麼 Vue 通過 watch 選項提供了一個更通用的方法,來響應數據的變化。當需要在數據變化時執行非同步或開銷較大的操作時,這個方式是最有用的

 

比如這裡,模擬一個網頁搜索輸入框,當我輸入vue時,自動補齊數據為 vue 官網  

註意:使用偵聽器時,屬性直接時那個待渲染的字元串msg

 

 

生命周期函數

 

又叫鉤子函數,在組件的創建到銷毀的每個時段都有一個hook函數,即鉤子,這個就是生命周期函數

所有的生命周期鉤子自動綁定 this 上下文到實例中,因此你可以訪問數據,對屬性和方法進行運算。這意味著你不能使用箭頭函數來定義一個生命周期方法 (例如 created: () => this.fetchTodos())。這是因為箭頭函數綁定了父上下文,因此 this 與你期待的 Vue 實例不同,this.fetchTodos 的行為未定義

 

每個 Vue 實例在被創建時都要經過一系列的初始化過程——例如,需要設置數據監聽、編譯模板、將實例掛載到 DOM 併在數據變化時更新 DOM 等。同時在這個過程中也會運行一些叫做生命周期鉤子的函數,這給了用戶在不同階段添加自己的代碼的機會

 

生命周期函數一共有如下:

  • beforeCreate :創建之前
  • created:創建之後哦
  • beforeMount:掛載之前
  • mounted:掛載之後
  • beforeUpdate:更新之前
  • updated:更新之後
  • activated:激活之前
  • deactivated:激活之後
  • beforeDestroy:銷毀之前
  • destroyed:銷毀之後
  • errorCaptured:錯誤調用,這個可以忽略,基本不怎麼用

 

那麼這裡呢就來一個大綜合的例子:

 

 

 

<keep-alive></keep-alive>

 

 

但是,在很多時候,其實我們並不想刪除,只是想隱藏就行了,比如之前直接一個css樣式dispaly:none就行了,vue里其實也有這種類似的組件——keep-alive:

 

當點擊銷毀已經不會走beforeDestory和destoryed周期函數,這個組件暫且這樣,以後還會用到的,詳細的就看官方文檔吧

 

以上生命周期函數代碼:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>

    <style>

    </style>
</head>

<body>
    <div id="app">
    </div>
    <script type="text/javascript" src="./node_modules/vue/dist/vue.min.js"></script>
    <script>
        var Vcommon = {
            template: `<div>{{msg}}<button  @click="changeHander">修改</button></div>`,
            data() {
                return {
                    msg: 'test',
                }
            },
            methods: {
                changeHander() {
                    this.msg = 'vue的聲明周期函數測試'
                }
            },
            beforeCreate() {
                console.log('創建之前')
            },
            created() {
                console.log('創建之後')
            },
            beforeMount() {
                console.log('掛載之前')
            },
            mounted() {
                console.log('掛載之後')
            },
            beforeUpdate() {
                console.log('更新之前')
            },
            updated() {
                console.log('更新之後')
            },
            beforeDestroy() {
                console.log('銷毀之前')
            },
            destroyed() {
                console.log('銷毀之後')
            },
        }
        let app = new Vue({
            el: '#app',
            data: {
                isShow: true
            },
            components: {
                Vcommon
            },
            methods: {
                change() {
                    this.isShow = !this.isShow
                }
            },
            template: `<div>
                <keep-alive>
                    <Vcommon v-if = 'isShow'/>
                </keep-alive>
                <button @click="change">銷毀</button>
            </div>`

        })
    </script>
</body>

</html>
生命周期函數

 

 

 以下為官方文檔的聲明周期函數的前後邏輯

 

根據個人經驗,用的比較多的周期函數還是mouted

 

獲取DOM元素

 

根據官方文檔的解釋,貌似是不太贊同獲取DOM元素進行操作,不過還是給了一個可以直接獲取DOM的元素的屬性 ref 和$refs

 

希望獲取的DOM給一個ref屬性,值為自定義,通過mouted周期函數才能拿到數據,利用Vue實例中的$refs.(自定義的值)即可拿到:為什麼是$refs這個可以自己去看官網

 

 

 

拿到之後就可以對其進行DOM操作了,如果希望獲取組件對象,一樣的操作即可

 

如下,我們希望對input標簽用focus聚焦,打開自動去到輸入框的效果:

 

但是你發現,明明可以拿到DOM元素,但是操作不了,這就是vue的虛擬DOM的效果了,虛擬DOM是react提出來的,然後三大框架現在都有了虛擬DOM的概念,因為載入速度比較快,性能較好

那麼此時怎麼辦呢,利用$nextTick做延時就行:

打開頁面input框自動聚焦已自動聚焦

 

代碼

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>

    <style>

    </style>
</head>

<body>
    <div id="app">
    </div>
    <script type="text/javascript" src="./node_modules/vue/dist/vue.min.js"></script>
    <script>
        let app = new Vue({
            el: '#app',
            data: {

            },
            mounted() {
                // console.log(this.$refs.input)
                // console.log(this.$refs.input.focus())
                this.$nextTick(function () {
                    // 獲取更新之後的DOM
                    this.$refs.input.focus()
                })
            },
            template: `<div>
                <input type="text" ref="input">
                </div>`


        })
    </script>
</body>

</html>
$nextTick

 

總結

其實沒什麼可說的,還是多看官方文檔,我感覺寫的很詳細了,我的文章只是把一些可能經常用的抽出來而已

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 菜單(Menu)在Android開發中,是一種常見的用戶界面組件,通過使用菜單Api可以給用戶提供常見的一致的體驗 ...
  • 之前使用Masonry對UIScrollView進行過約束,當時是遇到了問題的,怎麼約束都不對,因為趕進度直接改用frame了也沒有對問題深究。就這樣過了很久.........,直到前一段換工作的時候面試官問到,使用Masonry對UIScrollView自動佈局應該註意些什麼?額....,猶豫了一 ...
  • 簡單的qq登錄界面佈局 ...
  • 文章大綱 一、 什麼是Fragment二、 Fragment生命周期三、 Fragment簡單實例四、Fragment實戰五、項目源碼下載六、參考文章 一、 什麼是Fragment Fragment是Android3.0後引入的一個新的API,他出現的初衷是為了適應大屏幕的平板電腦, 當然現在他仍然 ...
  • 此處我只是做個記錄,後邊再補充 原文地址:http://www.jufanshare.com/content/35.html 這篇文章寫的比較清楚,還附有Demo代碼。算是不錯的Android Glide詳細使用教程。 下邊是我的使用理解: ...
  • 如何打造一個安全的App?這是每一個移動開發者必須面對的問題。在移動App開發領域,開發工程師對於安全方面的考慮普遍比較欠缺,而由於iOS平臺的封閉性,遭遇到的安全問題相比於Android來說要少得多,這就導致了許多iOS開發人員對於安全性方面沒有太多的深入,但對於一個合格的軟體開發者來說,安全知識 ...
  • 一、下麵的公鑰和私鑰暫時存到文本編輯器中 公鑰: BEGIN PUBLIC KEY MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQB8vXG0ImYhLHvHhpi5FS3gd2QhxSQiU6dQ04F1OHB0yRRQ3NXF5py2NNDw962i4WP1 ...
  • 每一個 HTML 文檔中,都有一個不可或缺的標簽: ,它作為一個容器,主要包含了用於描述 HTML 文檔自身信息(元數據)的標簽,這些標簽一般不會在頁面中被顯示出來,大多情況下是給瀏覽器和搜索引擎看的。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...