Vue.js 实例方法

Vue 实例方法

实例属性


1、组件树访问

1-1、vm.$parent

用来访问当前组件实例的父实例,如果当前实例有的话

1-2、vm.$root

当前组件树的根 Vue 实例。如果当前实例没有父实例,此实例将会是其自已

1-3、vm.$children

类型:Array<Vue instance>

当前实例的直接子组件。需要注意 $children 并不保证顺序,也不是响应式的。如果你发现自己正在尝试使用 $children 来进行数据绑定,考虑使用一个数组配合 v-for 来生成子组件,并且使用 Array 作为真正的来源。

1-4、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>

1-5、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-6、vm.$isServer

类型:boolean

当前 Vue 实例是否运行于服务器。

2、DOM访问

2-1、vm.$el

类型:HTMLElement

用来访问挂载当前组件实例的 DOM 元素

2-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>

3、数据访问

3-1、vm.$data

用来访问组件实例观察的数据对象,该对象引用组件实例化时选项中的data属性

3-2、vm.$options

用于当前 Vue 实例的初始化选项。需要在选项中包含自定义属性时会有用处:

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

实例方法


1、数据

1-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-2、vm.$set( object, key, value )

这是全局 Vue.set 的别名

参数:{Object} object

{string} key

{any} value

返回值:设置的值

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

这是全局 Vue.delete 的别名

参数:{Object} object

{string} key



2、事件

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

参数:{String} event

{Function} callback

用法:监听当前实例上的自定义事件。事件可以由vm.$emit触发。回调函数会接收所有传入事件触发函数的额外参数。

示例:

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

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

参数:{String} event

{Function} callback

用法:监听一个自定义事件,但是只触发一次,在第一次触发之移除除监听器。

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

参数:{String} event

{Function} callback

用法:移除事件监听器。

(1)、如果没有提供参数,则移除所有的事件监听器;

(2)、如果只提供了事件,则移除该事件所有的监听器;

(3)、如果同时提供了事件与回调,则只移除这个回调的监听器。

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

参数:{String} event

[...args]

用法:触发当前实例上的事件。附加参数都会传给监听器回调。

3、生命周期

3-1、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-2、vm.$forceUpdate()

迫使Vue实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。

3-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-4、vm.$destroy()

完全销毁一个实例。清理它与其它实例的连接,解绑它的全部指令及事件监听器。  触发 beforeDestroy 和 destroyed 的钩子。

注意:在大多数场景中你不应该调用这个方法。最好使用 v-if 和 v-for 指令以数据驱动的方式控制子组件的生命周期。

时间: 2024-10-14 08:52:10

Vue.js 实例方法的相关文章

vue.js基础知识篇(5):过渡、Method和Vue实例方法

第8章:过渡 1.CSS过渡 2.JavaScript过渡 3.渐进过渡 第9章:method Vue.js的事件一般通过v-on指令配置在HTML中,虽然也可以在js的代码中使用原生的addEventListener方法添加事件监听,但并不推荐,因为它并不符合"关注点分离"的设计理念. 使用v-on指令有几点好处: 通过HTML模板(视图)就能看到js对应的方法;无需手动绑定事件,ViewModel和DOM完全解耦.易于测试;当一个ViewModel被销毁时,所有的事件处理器都会被自

Vue.js说说组件

什么是组件:组件是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能.在有些情况下,组件也可以是原生HTML元素的形式,以is特性扩展. 如何注册组件? 需要使用Vue.extend方法创建一个组件,然后使用Vue.component方法注册组件.Vue.extend方法格式如下: var MyComponent = Vue.extend({ // 选项...后面再介绍 }) 如果想要其他地方使用这个创

vue.js基础知识篇(6):组件详解

第11章:组件详解 组件是Vue.js最推崇也最强大的功能之一,核心目标是可重用性. 我们把组件代码按照template.style.script的拆分方式,放置到对应的.vue文件中. 1.注册 Vue.js的组件注册分为全局注册和局部注册. 全局注册使用Vue.component方法.第一个参数是组件名字,第二个参数是组件的构造函数,要么是function,要么是object. <!DOCTYPE html> <html lang="en"> <hea

Vue.js 源码学习笔记 -- 分析前准备 待续

主体 实例方法归类: data     数据方法 dom     dom方法 event    事件处理 lifecycl   生命周期函数 init 初始化vue页面 全局方法: derectives filters init过程 data : observer deps computed watch || watcher template: fragment [ directive repeat if component transition filter ] 重点: 把数据(Model)

vue.js 常用语法总结(一)

作者:曾萍,目前就职于京东商城. 概述 2016年已经结束了.你是否会思考一下,自己在过去的一年里是否错过一些重要的东西?不用担心,我们正在回顾那些流行的趋势.通过比较过去12个月里Github所增加的star数,我们利用bestof.js.org分析所涉及的项目技术,发现2016最流行项目有以下这些:图片通过比较去年最火的10个项目,你可以总览2016的web前端技术发展,会发现:Vue.js在去年获得了超过25000个star,这意味着每天有72个star,超过了包含React以及Angul

Vue.js 1.x 和 2.x 实例的生命周期

在Vue.js中,在实例化Vue之前,它们都是以HTML的文本形式存在文本编辑器中.当实例化后将经历创建.编译.销毁三个主要阶段. 以下是Vue.js 1.x  实例的生命周期图示: Vue.js 1.x 的生命周期钩子 1. init  在实例开始初始化时同步调用.此时数据观测.事件和Watcher都尚未初始化. 2. created 在实例化创建之后同步调用.此时实例已经结束解析选项,已建立:数据绑定.计算属性.方法.Watcher/事件回调,但是还没有开始DOM编译,$el还不存在. 3.

Vue.js学习 Item12 – 内部响应式原理探究

深入响应式原理 大部分的基础内容我们已经讲到了,现在讲点底层内容.Vue.js 最显著的一个功能是响应系统 —— 模型只是普通对象,修改它则更新视图.这让状态管理非常简单且直观,不过理解它的原理也很重要,可以避免一些常见问题.下面我们开始深挖 Vue.js 响应系统的底层细节. 如何追踪变化 把一个普通对象传给 Vue 实例作为它的 data 选项,Vue.js 将遍历它的属性,用 Object.defineProperty 将它们转为 getter/setter.这是 ES5 特性,不能打补丁

一款简单而不失强大的前端框架——【Vue.js的详细入门教程①】

↓— Vue.js框架魅力 —↓ 前言   Vue.js 是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.Vue 只关注视图层并且采用自底向上增量开发的设计. Vue.js作为一个后起的前端框架,借鉴了Angular .React等现代前端框架/库的诸多特点,取得了相当不错的成绩.Vue.js 自身不是一个全能框架——它只聚焦于视图层.因此它非常容易学习,非常容易与其它库或已有项目整合.另一方面,在与相关工具和支

Vue.js常见问题

1.Vuejs组件 vuejs构建组件使用 Vue.component('componentName',{ /*component*/ }): 这里注意一点,组件要先注册再使用,也就是说: Vue.component('mine',{ template:'#mineTpl', props:['name','title','city','content'] }); var v=new Vue({ el:'#vueInstance', data:{ name:'zhang', title:'this