精读 Vue 官方文档系列 ?
组件实例 的方法与属性。
下面来直观获取一个组件实例—— this
。
let that;
const vm = new Vue({
mounted(){
that = this;
}
});
vm === that;
组件实例 - 属性
$data
获取当前 Vue 实例的响应式数据。 Vue 实例代理了对其 property 的访问,所以你可以直接通过 this
访问。
$props
获取当前组件接收到的所有 props
。Vue 实例代理了对其 property 的访问,所以你可以直接通过 this
访问。
$el
获取当前组件实例的根元素。
$options
获取当前 Vue 实例上的自定义选项。
const customFilters = {};
new Vue({
customFilters,
created:function(){
this.$options.router;
this.$options.customFilters
}
})
$parent
获取当前组件实例的父实例。父实例也可以通过组件的 parent
选项进行手动指定。
$root
获取 Vue 应用的根实例。
$children
当前实例的直接子组件。需要注意 $children 并不保证顺序,也不是响应式的。
$slots
用来访问当前组件接收到的所有插槽内容,值是一个对象,对象成员的 key 便是具名插槽的名称,如果没有指定具名插槽,则默认的插槽名称为 default
。
this.$slots.default; //获取默认的插槽内容。
this.$slots.header; //获取名称为 header 的插槽内容。
$scopedSlots
用来访问当前组件接收到的所有插槽内容, 值是一个对象,对象成员的 key 便是具名插槽的名称,与普通 $slots
不同的是,对象成员的 value 则是一个函数,通过执行这些函数并向其中传参,用来返回实际的插槽内容,而这就是作用域插槽的核心点,如何从组件内部向组件外部传递数据的关键。
this.$scopedSlots.default({props:this.props});
$refs
值是一个对象,保存所有绑定过 ref
Attribute 的 DOM 元素对象和组件实例。
<a ref="anchor">Anchor</a>
this.$refs.anchor;
$isServer
当前 Vue 实例是否运行于服务器。
$attrs
获取当前组件绑定的所有非 props
的 attribute,值是一个对象。
它可以通过 v-bind="$attrs" 一次性的传入内部组件——这在创建更高层次的组件时非常有用。
$listeners
包含了父作用域中的 (不含 .native
修饰符的) v-on
事件监听器。值是一个对象。
它可以通过 v-on="$listeners"
传入内部组件——在创建更高层次的组件时非常有用。
组件实例 - 方法
$watch()
现在监听数据变动,除了使用组件的 watch
选项,还可以选择组件实例的 $watch
方法。
vm.$watch(expOrFn, callback [,options])
接收三个参数:
expOrFn
: 要监听的Vue实例上的表达式或者是监听一个函数计算结果的变化。callback
: 监听变动时触发的回调,它接收两个参数,分别是newValue
与oldValue
。options
: 配置项,可以提供更高级的监听配置,例如immediate
以及deep
等,这与组件的watch
选项没有什么不同。
const unwatch = vm.$watch('a.b.c', function (newVal, oldVal) {
// 做点什么
})
// 函数
vm.$watch(
function () {
// 表达式 `this.a + this.b` 每次得出一个不同的结果时
// 处理函数都会被调用。
// 这就像监听一个未被定义的计算属性
return this.a + this.b
},
function (newVal, oldVal) {
// 做点什么
}
)
// 之后取消监听
unwatch();
vm.$watch
返回一个取消观察函数,用来停止触发回调:
注意在带有 immediate 选项时,你不能在第一次回调时取消侦听给定的 property。
如果你仍然希望在回调内部调用一个取消侦听的函数,你应该先检查其函数的可用性:
var unwatch = vm.$watch(
'value',
function () {
doSomething()
if (unwatch) {
unwatch()
}
},
{ immediate: true }
)
$set()
为组件实例的可嵌套响应式对象动态加入响应式成员,并确保组件的视图可以响应式更新。
这是全局 Vue.set
的别名。
$delete()
删除组件实例的响应式对象成员。
这是全局 Vue.delete
的别名。
组件实例 - 事件
$on()
向当前组件实例绑定一个自定义事件,事件回调函数可以接收事件触发时传入的所有事件参数。
$on
方法绑定的事件可以由 $emit
触发。
const handler = function (msg) {
console.log(msg)
};
vm.$on('test', handler);
vm.$emit('test', 'hi')
// => "hi"
$once()
与 $on
使用方式相同,只是通过 $once
绑定的自定义事件,只会触发一次,触发后就会被移除。
$off()
移除自定义事件。
vm.$off(); //如果没有提供参数,则移除所有的事件监听器;
vm.$off('test'); //如果只提供了事件,则移除该事件所有的监听器;
vm.$off('test', handler); //如果同时提供了事件与回调,则只移除这个回调的监听器。
$emit()
触发当前实例上的事件。附加参数都会传给监听器回调。
组件实例 - 生命周期
$mount()
如果 Vue 实例在实例化时没有收到 el 选项,则它处于“未挂载”状态没有关联的 DOM 元素。可以使用 vm.$mount()
手动地挂载一个未挂载的实例。
这个方法返回实例自身,因而可以链式调用其它实例方法。
$forceUpdate()
迫使 Vue 实例重新渲染。
$nextTick()
将回调延迟到下次 DOM 更新循环之后执行。它跟全局方法 Vue.nextTick
一样,不同的是回调的 this 自动绑定到调用它的实例上。
$destory()
完全销毁一个实例。清理它与其它实例的连接,解绑它的全部指令及事件监听器。
触发 beforeDestroy
和 destroyed
的钩子。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!