下面有一个vue组件,我想观察它在挂载时的触发。我该怎么做?
Vue.component('check-mark', {
name: 'check-mark',
template: `<input :value="value"/>`,
props: {
value: {
type: String,
required: true,
},
},
mounted: async function () {
//trigger this.value watch() here
},
watch: {
value: function (value) {
if (value == 'Y') {
this.class = 'checked';
} else {
this.class = 'unchecked';
}
},
},
});
3条答案
按热度按时间c9qzyr3d1#
从Vue 2.0开始,现在有一种方法可以在监视器本身中完成,使用
immediate: true
。在使用之前,确保您确实需要一个监视器而不是一个计算属性。
计算属性有许多优点,而且通常是更好的解决方案。
只有在计算属性不足时才应使用此功能。
在原始问题的特定情况下,
class
的计算属性肯定会更好,但发布这篇文章只是为了防止其他人偶然发现这篇文章中的计算属性不起作用的情况(就像我一样)。监视器可以是一个对象,而不仅仅是一个函数,并接受属性**
immediate
,该属性告诉vue在创建**组件时运行监视器(不同于 mounted)。然后,运行的函数位于
handler
属性中。因此,在您的示例中,您的观察者可以是:
* 编辑 *
注解中指出,
immediate
选项在组件***创建***时触发观察器,而不是在***挂载***时触发观察器,在简单的情况下,这些可以看作是等价的。如果你真的想为一个监视器设置run when***mount***功能,你可以简单地把你正在监视的字段设置为一些伪值,比如
null
或undefined
,然后在mounted()
钩子中初始化它。e7arh2l62#
我想在这种情况下你最好用电脑。
但是如果您真的想使用一个监视器,那么可以将您在监视器中所做的代码抽象为一个方法,并从挂载中调用它。
q0qdq0h23#
我在使用脚本设置在Vue 3中查找时遇到了这个问题。
注意,我不想使用
immediate: true
选项,因为我使用的是对模板元素的引用,而该模板元素**只在挂载后存在。因此,我使用了vue-use中的
watchTriggerable
实用程序下面是你的例子:
请️注意,在这个例子中,使用
immediate: true
选项就完全可以了。用一个计算机。但这是为了举例。您需要安装并导入vue-use:
然后使用将其导入到组件中