Vue.js 實例方法

Vue 實例方法
css


實例屬性html


一、組件樹訪問vue

1-一、vm.$parent數組

用來訪問當前組件實例的父實例,若是當前實例有的話服務器


1-二、vm.$rootapp

當前組件樹的根 Vue 實例。若是當前實例沒有父實例,此實例將會是其自已ide


1-三、vm.$children函數

類型:Array<Vue instance>post

當前實例的直接子組件。須要注意 $children 並不保證順序,也不是響應式的。若是你發現本身正在嘗試使用 $children 來進行數據綁定,考慮使用一個數組配合 v-for 來生成子組件,而且使用 Array 做爲真正的來源。this


1-四、vm.$refs

類型:Object

一個對象,其中包含了全部擁有 ref 註冊的子組件。


代碼示例以下:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="app">
    <input v-model="msg">
    <p>`msg`</p>
</div>

<script src="//cdn.bootcss.com/vue/1.0.26/vue.js"></script>
<script>
    var vm = new Vue({
        el:'#app',
        data:{
            msg:'Hello World!'
        }
    })
</script>
</body>
</html>

wKiom1g2hF-BxIOSAAB28tqUAKQ280.png


1-五、vm.$slots

類型:Object

用來訪問被 slot 分發的內容。每一個具名 slot 有其相應的屬性(例如:slot="foo" 中的內容將會在 vm.$slots.foo 中被找到)。default 屬性包括了全部沒有被包含在一個具名 slot 中的節點。


在使用 render 函數書寫一個組件時,訪問 vm.$slots 最有幫助。

HTML:

<blog-post>
    <h1 slot="header">
        About Me
    </h1>
    <p>Here's some page content, which will be included in vm.$slots.default, because it's not inside a named slot.</p>
    <p slot="footer">
        Copyright 2016 Evan You
    </p>
    <p>If I have some content down here, it will also be included in vm.$slots.default.</p>.
</blog-post>


JS:

Vue.component('blog-post', {
    render: function (createElement) {
        var header = this.$slots.header
        var body   = this.$slots.default
        var footer = this.$slots.footer
        return createElement('div', [
            createElement('header', header)
            createElement('main', body)
            createElement('footer', footer)
        ])
    }
})


1-六、vm.$isServer

類型:boolean

當前 Vue 實例是否運行於服務器。



二、DOM訪問

2-一、vm.$el

類型:HTMLElement

用來訪問掛載當前組件實例的 DOM 元素


2-二、vm.$els

用來訪問$el 元素中使用了 v-el 指令的DOM 元素


v-el 用法:爲DOM元素註冊一個索引,方便經過所屬實例的$els 訪問這個元素。能夠用 v-el:some-el 設置 this.$els.someEl


代碼示例以下:

<div id="app">
    <p v-el:msg>Hello</p>
    <p v-el:other-msg>World</p>
</div>

<script src="//cdn.bootcss.com/vue/1.0.26/vue.js"></script>
<script>
    var vm = new Vue({
        el:'#app',
        data:{
            msg:'',
            otherMsg:''
        },
        methods:{
            show:function(){ //經過this.$els獲取相應的DOM元素
                console.log(this.$els.msg.textContent);
            },
            showOther:function(){
                console.log(this.$els.otherMsg.textContent);
            }
        }
    });
</script>

wKioL1g2iDaTjRxKAACfGlFXifI882.png



三、數據訪問

3-一、vm.$data

用來訪問組件實例觀察的數據對象,該對象引用組件實例化時選項中的data屬性


3-二、vm.$options

用於當前 Vue 實例的初始化選項。須要在選項中包含自定義屬性時會有用處:

new Vue({
customOption: 'foo',
created: function () {
console.log(this.$options.customOption) // -> 'foo'
}
})



實例方法


一、數據

1-一、vm.$watch( expOrFn, callback, [options] )

參數:expOrFn -->  一個字符串 或者 函數

          callback  -->  函數

          [options] -->  對象

          deep  -->  布爾值

          immediate  --> 布爾值


返回值:unwatch --> 函數


用法:

觀察 Vue 實例變化的一個表達式或計算屬性函數。回調函數獲得的參數爲新值和舊值。表達式只接受監督的鍵路徑。對於更復雜的表達式,用一個函數取代。


注意:在變異(不是替換)對象或數組時,舊值將與新值相同,由於它們的引用指向同一個對象/數組。Vue 不會保留變異以前值的副本。


代碼示例以下:

// 鍵路徑
vm.$watch('a.b.c', function (newVal, oldVal) {
    // 作點什麼
})
// 函數
vm.$watch(
        function () {
            return this.a + this.b
        },
        function (newVal, oldVal) {
            // 作點什麼
        }
)


vm.$watch 返回一個取消觀察函數,用來中止觸發回調:

var unwatch = vm.$watch('a', cb)
// 以後取消觀察
unwatch()


選項:deep

爲了發現對象內部值的變化,能夠在選項參數中指定 deep: true 。注意監聽數組的變更不須要這麼作。

vm.$watch('someObject', callback, {
    deep: true
})
vm.someObject.nestedValue = 123
// callback is fired


選項:immediate

在選項參數中指定 immediate: true 將當即以表達式的當前值觸發回調:

vm.$watch('a', callback, {
    immediate: true
})
// 當即以 `a` 的當前值觸發回調


1-二、vm.$set( object, key, value )

這是全局 Vue.set 的別名

參數:{Object} object

          {string} key

          {any} value

返回值:設置的值


1-三、vm.$delete( object, key )

這是全局 Vue.delete 的別名

參數:{Object} object

          {string} key




二、事件

2-一、vm.$on( event, callback )

參數:{String} event

          {Function} callback

用法:監聽當前實例上的自定義事件。事件能夠由vm.$emit觸發。回調函數會接收全部傳入事件觸發函數的額外參數。


示例:

vm.$on('test', function (msg) {
    console.log(msg)
})
vm.$emit('test', 'hi')
// -> "hi"


2-二、vm.$once( event, callback )

參數:{String} event

          {Function} callback

用法:監聽一個自定義事件,可是隻觸發一次,在第一次觸發之移除除監聽器。



2-三、vm.$off( [event, callback] )

參數:{String} event

          {Function} callback

用法:移除事件監聽器。  

    (1)、若是沒有提供參數,則移除全部的事件監聽器;

    (2)、若是隻提供了事件,則移除該事件全部的監聽器;

    (3)、若是同時提供了事件與回調,則只移除這個回調的監聽器。



2-四、vm.$emit( event, […args] )

參數:{String} event

          [...args]

用法:觸發當前實例上的事件。附加參數都會傳給監聽器回調。


三、生命週期

3-一、vm.$mount( [elementOrSelector] )

參數:

    {Element | string} [elementOrSelector]

    {boolean} [hydrating]

返回值:vm - 實例自身

用法:

若是 Vue 實例在實例化時沒有收到 el 選項,則它處於「未掛載」狀態,沒有關聯的 DOM 元素。可使用 vm.$mount() 手動地掛載一個未掛載的實例。


若是沒有提供 elementOrSelector 參數,模板將被渲染爲文檔以外的的元素,而且你必須使用原生DOM API把它插入文檔中。


這個方法返回實例自身,於是能夠鏈式調用其它實例方法。

var MyComponent = Vue.extend({
    template: '<div>Hello!</div>'
})
// 建立並掛載到 #app (會替換 #app)
new MyComponent().$mount('#app')
// 同上
new MyComponent({ el: '#app' })
// 或者,在文檔以外渲染而且隨後掛載
var component = new MyComponent().$mount()
document.getElementById('app').appendChild(component.$el)


3-二、vm.$forceUpdate()

迫使Vue實例從新渲染。注意它僅僅影響實例自己和插入插槽內容的子組件,而不是全部子組件。



3-三、vm.$nextTick( callback )

參數:{Function} callback

用法:

將回調延遲到下次 DOM 更新循環以後執行。在修改數據以後當即使用它,而後等待 DOM 更新。它跟全局方法 Vue.nextTick 同樣,不一樣的是回調的 this 自動綁定到調用它的實例上。


示例代碼以下:

new Vue({
    // ...
    methods: {
        // ...
        example: function () {
            // 修改數據
            this.message = 'changed'
            // DOM 尚未更新
            this.$nextTick(function () {
                // DOM 如今更新了
                // `this` 綁定到當前實例
                this.doSomethingElse()
            })
        }
    }
})


3-四、vm.$destroy()

徹底銷燬一個實例。清理它與其它實例的鏈接,解綁它的所有指令及事件監聽器。  觸發 beforeDestroy 和 destroyed 的鉤子。


注意:在大多數場景中你不該該調用這個方法。最好使用 v-if 和 v-for 指令以數據驅動的方式控制子組件的生命週期。

相關文章
相關標籤/搜索