vue騷操作之this.$options(個人筆記)

一、過濾器不能通過this來復用?不存在的

過濾器被用于一些常見的文本格式化,被添加在表達式的尾部,由“管道”符號指示。

<div>{{ text | capitalize }}</div>
export default {
    data() {
        return {
            text: 'hello'
        }  
    },
    filters: {
        capitalize: function (value) {
            if (!value) return ''
            value = value.toString()
            return value.charAt(0).toUpperCase() + value.slice(1)
         }
    }
}

試想一個場景,不僅模板內用到這個函數,在 method 里也需要同樣功能的函數。但過濾器無法通過 this 直接引用,難道要在 methods 再定義一個同樣的函數嗎?

要知道,選項配置都會被存儲在實例的 $options 中,所以只需要獲取 this.$options.filters就可以拿到實例中的過濾器。豁然開朗.jpg

export default {
    methods: {
        getDetail() {
            this.$api.getDetail({
                id: this.id
            }).then(res => {
                let capitalize = this.$options.filters.capitalize
                this.title = capitalize(res.data.title)
            })
        }
    }
}

除了能獲取到實例的過濾器外,還能獲取到全局的過濾器,因為 this.$options.filters 會順著 proto 向上查找,全局過濾器就存在原型中。

重置data中的數據? 一鍵搞定

在vue單文件組件里有時需要重置data中的數據,比如表單填寫一半,用戶想重新填寫。

<script>
    export default {
        data() {
            return {
                // 表單
                form: {
                    input: ''
                }
            }
        },
        methods: {
            // 重置表單方法
            retset() {
                this.form = this.$options.data().form;
            }
        },
    }
</script>

也可以通過給組件 $data 對象賦值來重置來重置整個 $data

this.$data = this.$options.data();

本文參考:過濾器復用
vue騷操作之this.$options.data()

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Vue Vue是一個前端js框架,由尤雨溪開發,是個人項目 Vue近幾年來特別的受關注,三年前的時候angular...
    hcySam閱讀 301評論 0 0
  • View層 ---> html標簽 | Model層 ---> data數據 一.v-for: 1.數組:...
    韓娜愛吃辣_前端程序媛閱讀 942評論 4 1
  • 這個問題是在下在做一個 Vue 項目中遇到的實際場景,這里記錄一下我遇到問題之后的思考和最后怎么解決的(老年程序員...
    前端js閱讀 691評論 0 0
  • vue筆記 一.vue實例 vue的生命周期 beforeCreate(創建前), created(創建后), b...
    秋殤1002閱讀 1,072評論 0 1
  • 基本格式 以json的形式、將數據(支持所有格式)掛載在vue的data上、方法掛載在vue的methods上。 ...
    kirito_song閱讀 786評論 0 21