Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

vue组件作为自定义组件被加载时不执行uni生命周期 #566

Closed
alonesuperman opened this issue Jul 22, 2019 · 5 comments
Closed

Comments

@alonesuperman
Copy link

alonesuperman commented Jul 22, 2019

问题描述
当一个自定义组件foo.vue作为page被载入能正常执行生命周期比如onLoad 、onShow等

但是当foo组件被其它page例如index.vue载入时 不执行foo的uni生命周期,仅执行foo的vue生命周期

复现步骤

1. 准备一个foo.vue

export default {
    onShow() {
        console.log("foo on show");
    }
    created() {
        console.log("foo created");
    }
}

2. 准备一个index.vue

<template>
    <view>
        <foo />
    </view>
</template>
<script>
export default {
    components: {
        foo,
    },
}
</script>

3. 访问这个index.vue对应的page 并查看对应控制台

仅能看到"foo created"

4. 访问这个foo.vue对应的page 并查看对应控制台

能看到"foo created"和"foo on show"

预期结果
在访问index.vue对应的pagefoo.vue对应的page均能看到"foo created"和"foo on show"

实际结果
当foo组件被当成自定义组件在index.vue对应的page中加载仅能看到"foo created" 。foo的uni生命周期均为执行

系统信息:

  • 发行平台: 各大小程序平台 以微信小程序为例
  • 操作系统: 任意
  • HBuilderX版本: 未使用
  • uni-app版本
    Environment Info:

System:
OS: Windows 10
CPU: (4) x64 Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz
Binaries:
Node: 8.15.0 - D:\Program Files\nodejs\node.EXE
Yarn: 1.16.0 - ~\AppData\Roaming\npm\yarn.CMD
npm: 6.8.0 - D:\Program Files\nodejs\npm.CMD
Browsers:
Edge: 42.17134.1.0 (我明明默认浏览器是chrome)
npmPackages:
@dcloudio/types: * => 0.2.6
@dcloudio/uni-app-plus: * => 0.0.247
@dcloudio/uni-app-plus-nvue: 0.0.1
@dcloudio/uni-app-plus-nvue-v8: 0.0.1
@dcloudio/uni-cli-shared: * => 0.2.972
@dcloudio/uni-h5: * => 0.6.3
@dcloudio/uni-mp-alipay: * => 0.0.821
@dcloudio/uni-mp-baidu: * => 0.0.850
@dcloudio/uni-mp-qq: * => 0.0.105
@dcloudio/uni-mp-toutiao: * => 0.0.345
@dcloudio/uni-mp-weixin: * => 0.0.966
@dcloudio/uni-template-compiler: * => 0.9.180
@dcloudio/vue-cli-plugin-hbuilderx: latest => 1.0.120
@dcloudio/vue-cli-plugin-uni: latest => 0.9.493
@dcloudio/webpack-uni-mp-loader: * => 0.3.639
@dcloudio/webpack-uni-nvue-loader: 0.0.1
@dcloudio/webpack-uni-pages-loader: * => 0.2.852
@vue/babel-helper-vue-jsx-merge-props: 1.0.0
@vue/babel-plugin-transform-vue-jsx: 1.0.0
@vue/babel-preset-app: 3.9.2
@vue/babel-preset-jsx: 1.0.0
@vue/babel-sugar-functional-vue: 1.0.0
@vue/babel-sugar-inject-h: 1.0.0
@vue/babel-sugar-v-model: 1.0.0
@vue/babel-sugar-v-on: 1.0.0
@vue/cli-overlay: 3.9.0
@vue/cli-plugin-babel: 3.5.1 => 3.5.1
@vue/cli-plugin-typescript: ^3.5.1 => 3.9.0
@vue/cli-service: ^3.9.0 => 3.9.2
@vue/cli-shared-utils: 3.9.0
@vue/component-compiler-utils: 2.6.0
@vue/preload-webpack-plugin: 1.1.0
@vue/web-component-wrapper: 1.2.0
mpvue-page-factory: 1.0.1
mpvue-template-compiler: 1.0.13
uni-h5-vue: 2.6.10
uni-mp-vue: 2.6.10
vue: ^2.6.10 => 2.6.10
vue-class-component: ^6.3.2 => 6.3.2 (7.1.0)
vue-hot-reload-api: 2.3.3
vue-loader: 15.7.0
vue-property-decorator: ^8.2.1 => 8.2.1
vue-router: 3.0.1
vue-style-loader: 4.1.2
vue-template-compiler: ^2.6.10 => 2.6.10
vue-template-es2015-compiler: 1.9.1
vuex: ^3.0.1 => 3.1.1
npmGlobalPackages:
@vue/cli: Not Found (我不知道为什么找不到,实际版本是3.8.4)

  • 设备信息 任意

补充信息
[可选]
[根据你的分析,出现这个问题的原因可能在哪里?]
看看uni对于生命周期的处理吧。。 但是感觉也有可能要魔改vue源码

@fxy060608
Copy link
Collaborator

作为组件时,仅支持 Vue 的生命周期

@alonesuperman
Copy link
Author

作为组件时,仅支持 Vue 的生命周期

唔, uni文档上没提到这一点呀

@zhetengbiji
Copy link
Collaborator

@liuyingqq123
Copy link

作为组件时,仅支持 Vue 的生命周期

可是我看onReady是支持的呢?

@liuyingqq123
Copy link

作为组件时,仅支持 Vue 的生命周期

作为组件时,仅支持 Vue 的生命周期
想了半天, 没想出来解决方案.
父组件A里, 有一个子组件B, 从子组件B, 跳转到组件C, 在组件C里填写数据, 保存后调用返回的api: uni.navigateBack, 如何刷新组件B(需要展示C填写的数据)?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants