生命周期

chameleon 为组件和 页面 提供了一系列生命周期事件,保障应用有序执行。如果你想使用某个端特定的生命周期,请从业务出发使用 接口多态 接收特定的生命周期事件回调。

钩子执行时机详细
beforeCreate实例初始化之后,数据和方法挂在到实例之前 一个页面只会返回一次 在该生命周期回调函数中会返回传入当前页面的参数对象
created数据及方法挂载完成
beforeMount开始挂载已经编译完成的cml到对应的节点时
mountedcml模板编译完成,且渲染到dom中完成
beforeDestroy实例销毁之前
destroyed实例销毁后

生命周期回调函数

beforeCreate(Object res)

参数说明

名称类型说明
resObject 在该生命周期回调函数中会 返回对象res: res = { query } query 是打开当前页面路径中的参数

钩子示例

  1. <template>
  2. <view>
  3. </view>
  4. </template>
  5. <script>
  6. class Index {
  7. beforeCreate(query) {
  8. // data数据挂载到this根节点上之前,以及methods所有方法挂载到实例根节点之前
  9. // 注意:只用页面的 beforeCreate钩子 会返回页面query
  10. console.log('App beforeCreate: 打开当前页面路径中的参数是 ', query)
  11. }
  12. created() {
  13. // data,methods里面的这些events挂载完成
  14. console.log('App created')
  15. }
  16. beforeMount() {
  17. // 开始挂载已经编译完成的cml到对应的节点时
  18. console.log('App beforeMount')
  19. }
  20. mounted() {
  21. // cml模板编译完成,且渲染到dom中完成,在整个生命周期中只执行一次
  22. console.log('App mounted')
  23. }
  24. beforeDestroy() {
  25. // 实例销毁前
  26. console.log('App beforeDestroy')
  27. }
  28. destroyed() {
  29. // 实例销毁后
  30. console.log('App destroyed')
  31. }
  32. };
  33. export default new Index();
  34. </script>

生命周期多态

cml*.[web|weex|wx].cml 文件中支持生命周期的多态,可以针对不同的平台添加专属钩子函数。

假设有一个页面home.cml,需要使用小程序页面生命周期微信端onHide支付宝端onHide百度端onHide,可以如下实现:

  • 项目根目录执行 cml init component,选择 multimode-interface 多态接口,输入interface name: lifecycleInterface,自动生成src/components/lifecycleInterface生命周期  - 图1

  • src/components/lifecycleInterface/lifecycleInterface.cml多态接口中,添加如下代码:

  1. <script cml-type="interface">
  2. interface LifecycleInterfaceInterface {
  3. onHide(): void;
  4. }
  5. </script>
  6. <script cml-type="web">
  7. class Method implements LifecycleInterfaceInterface {
  8. onHide() {
  9. console.log('web hide')
  10. }
  11. }
  12. export default new Method();
  13. </script>
  14. <script cml-type="weex">
  15. class Method implements LifecycleInterfaceInterface {
  16. onHide() {
  17. console.log('weex hide')
  18. }
  19. }
  20. export default new Method();
  21. </script>
  22. <script cml-type="wx">
  23. class Method implements LifecycleInterfaceInterface {
  24. onHide() {
  25. console.log('wx hide')
  26. }
  27. }
  28. export default new Method();
  29. </script>
  30. <script cml-type="alipay">
  31. class Method implements LifecycleInterfaceInterface {
  32. onHide() {
  33. console.log('alipay hide')
  34. }
  35. }
  36. export default new Method();
  37. </script>
  38. <script cml-type="baidu">
  39. class Method implements LifecycleInterfaceInterface {
  40. onHide() {
  41. console.log('baidu hide')
  42. }
  43. }
  44. export default new Method();
  45. </script>
  • home.cml 文件,使methods合并lifecycleInterface多态方法
  1. <template>
  2. <view>
  3. <text>home页面</text>
  4. <view>
  5. </template>
  6. <script>
  7. import lifecycleInterface from '../../components/lifecycleInterface/lifecycleInterface'
  8. class Home {
  9. data = {}
  10. computed = {}
  11. watch = {}
  12. methods = {
  13. ...lifecycleInterface
  14. }
  15. beforeCreate(res) {}
  16. created() {}
  17. }
  18. export default new Home()
  19. </script>