cml 框架小程序转发功能实现

cml 框架小程序转发功能实现

一 场景介绍

在业务系统中经常会遇到转发业务, 例如资讯详情的转发, 下面讲讲如何实现:

在这里插入图片描述

二 问题分析

点击右上角 三个点 发现当前页面没有设置分享转发, 搜索得知

https://www.cnblogs.com/jane2160/p/11685618.html

在这里插入图片描述

这里我们需要实现的是第一种, “自带菜单的分享”,

1. 设置页面允许分享

观察看到有个 onLoad ** 生命周期方法, 这个方法在cml** 中是对应的哪一个, 所以需要找到onLoad 对应的生命周期方法, 查阅文档:

https://cml.js.org/doc/example/wx_to_chameleon.html?h=生命周期

在这里插入图片描述

发现对应的是created 方法, 将上面的代码cml写法:

<script>
import cml from 'chameleon-api'

class Detail   {
...
  created(query) {
    wx.showShareMenu({// 开启当前页面的分享,(如需使用多端, 需要封装为多态接口方法调用)
      withShareTicket: true
    })
  }
...
}

export default new Detail();
</script>
2. 设置分享内容

在这里插入图片描述

这个方法要写在cml methods对象中, cml写法:

<template>
  <view class="article">
    <text class="article-title">{{ title }}</text>
    <view class="article-content">
      <m-rich-text nodes="{{ content }}"> </m-rich-text>
    </view>
  </view>
</template>

<script>
import cml from 'chameleon-api'
import api from '../../components/api/api' // 引用多态方法


class Detail   {

  data = {
    title:'',
    content: ''
  }

  computed = {
  }

  methods = {
     onShareAppMessage(ops) {
      const me = this
      return {
         title: me.title, //分享出来的资讯的标题
         path: `pages/detail/detail?title=${me.title}&content=${me.content}`,// 传入页面的query参数(进入beforeCreate中)
         success: function (res) {
          // 转发成功
         console.log("转发成功:" + JSON.stringify(res));
        },
        fail: function (res) {
         // 转发失败
        console.log("转发失败:" + JSON.stringify(res));
       }
     }
   }
  }


  beforeCreate(query) {
    this.title = decodeURIComponent(query.title)  || ''
    const content = decodeURIComponent(query.content)

    this.content = content || ''
  }

  created(query) {
    wx.showShareMenu({// 开启当前页面的分享,(如需使用多端, 需要封装为多态接口方法调用)
      withShareTicket: true
    })
  }
  
}

export default new Detail();
</script>


3.结果展示

在这里插入图片描述

三 提高篇

多态封装

多态接口方法

https://cmljs.org/docs/poly.html#%E5%A4%9A%E6%80%81%E6%8E%A5%E5%8F%A3

在这里插入图片描述

src\components\api\showShareMenu\index.interface

<script cml-type="interface">
interface ShowShareMenuInterface {
  showShareMenu(): void;
}

</script>


<script cml-type="wx">

class Method implements ShowShareMenuInterface {
  showShareMenu() {
    wx.showShareMenu({
      // 要求小程序返回分享目标信息
      withShareTicket: true
    });
  }
}

export default new Method();
</script>

src\components\api\showShareMenu\index.js

import index from './index.interface';

export default function showShareMenu() {
  index.showShareMenu();
}

src\components\api\api.js

可以扩展多态方法

import makePhoneCall from './makePhoneCall/index.js'

import showShareMenu from './showShareMenu/index.js'


export default {
  makePhoneCall,
....
  showShareMenu
}

此时页面Page层调用如下

src\pages\detail\detail.cml

<template>
  <view class="article">
    <text class="article-title">{{ title }}</text>
    <view class="article-content">
      <m-rich-text nodes="{{ content }}"> </m-rich-text>
    </view>
  </view>
</template>

<script>
import cml from 'chameleon-api'
import api from '../../components/api/api' // 引用多态方法


class Detail   {

  data = {
    title:'',
    content: ''
  }

  computed = {
  }

  watch  = {
  }

  methods = {
     onShareAppMessage(ops) {
      const me = this
      return {
         title: me.title, //分享出来的资讯的标题
         path: `pages/detail/detail?title=${me.title}&content=${me.content}`,// 传入页面的query参数(进入beforeCreate中)
         success: function (res) {
          // 转发成功
         console.log("转发成功:" + JSON.stringify(res));
        },
        fail: function (res) {
         // 转发失败
        console.log("转发失败:" + JSON.stringify(res));
       }
     }
   }
  }


  beforeCreate(query) {
    this.title = decodeURIComponent(query.title)  || ''
    const content = decodeURIComponent(query.content)

    this.content = content || ''
  }
 
  created(query) {
    api.showShareMenu() // 多态方法的调用
  }

 
}

export default new Detail();
</script>


此时可以转发页面, 并展示信息

在这里插入图片描述

总结

  1. 设置页面允许分享

      created(query) {
        wx.showShareMenu({// 开启当前页面的分享,(如需使用多端, 需要封装为多态接口方法调用)
          withShareTicket: true
        })
      }
    
  2. 设置分享内容

     onShareAppMessage(ops) {
          const me = this
          return {
             title: ..., //分享出来的资讯的标题
             path: ...
             success: function (res) {
    ...
            },
            fail: function (res) {
    ...
           }
         }
       }
    

参考网站

https://www.cnblogs.com/jane2160/p/11685618.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值