uni-app框架下TypeScript语法中页面的onLoad事件为什么不会被触发?

发布于 2022-09-11 20:53:58 字数 820 浏览 14 评论 0

问题描述

在Uni-app平台下进行开发,单文件组件 (SFC) 的Script标签中使用TypeScript语法,当使用vue-property-decorator库的方式书写TypeScirpt代码时,为什么uni-app的单页生命周期函数onLoad,onReady等函数都无法被触发?而vue的mounted等函数可以被触发?

相关代码

//不使用vue-property-decorator的ts语句写法mounted,onLoad都会被触发

import Vue from 'vue';
export default Vue.extend({
    mounted() {
        console.log('The page is be mounted')
    },
    onLoad() {
        console.log('The page is on load success')
    }
});

//使用vue-property-decorator后只有vue的mounted会被触发,onLoad无法被触发

import { Vue, Component } from 'vue-property-decorator'

@Component
export default class App extends Vue{
    mounted() {
        console.log('The page is be mounted')
    }

    onLoad(){
        console.log('The page is on load success')
    }
}


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里寻她 2022-09-18 20:53:58

vue-property-decorator包对于Component 装饰器是直接拿的vue-class-component包的

那么我们来看一下@Component装饰器源码

clipboard.png

对于不处于$internalHooks中的且类型是函数的 它会给你丢到methods属性里去

你以为你最终是这样的

{
    mounted() {
        console.log('The page is be mounted')
    },
    onLoad() {
        console.log('The page is on load success')
    }
}

实际上是这样的

{
    mounted() {
        console.log('The page is be mounted')
    },
    methods: {
        onLoad() {
            console.log('The page is on load success')
        }
    }
}

所以不能被你的框架(uni-app)识别

建议自己再实现一个自定义装饰器(比如vue-class-component提供的createDecorator工厂方法) 通过分析componentOption来完成对最终返回的hook

说好的呢 2022-09-18 20:53:58

用ts的话这样写

export default class App extends Vue {
    onLoad() {
    }

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文