ionic单页面应用中微信分享的问题总结
首先说一下 ionic 是单页面应用,也就是说整个项目就有一个index.html, 那么问题就就来了, 如果我们不同的页面要分享给大家的是不同的链接和图片,应该怎么去做呢? 这就是我们今天要总结的东西. 今天这个问题真是闹得我心烦,有必要总结下来了.
学习重点:
- 微信分享方法巧妙封装
- 监听路由事件$rootScope.$on
- 举一反三
微信分享
关于微信分享,大家都是在熟悉不过了,无非就是调用微信的SDK,授权,给他分享索要的东西的ok。所以对于微信分享似乎没有什么好说的,但是细心的伙伴有木有发现,微信的分享并不是每次分享都去调用分享的方法,数据存进去每次分享都是拿上次的数据。
就因为这个我们在ionic单页面应用中倘若要实现每个页面都分享不同的信息,岂不是每个controller里面都要调用一次分享了,不然分享的信息都不会是你想要的,因为在Angular中controller不会重新加载一遍的哦!所以即便我们写了动态的数据,微信也压根不会理你的。你抱怨也没用,照我们老大的话就是:“你爱用不用喽”屌的很嘞!
Ionic中微信分享
言归正传,说我们今天的重点,就是怎么在ionic中实现不同页面分享不用的信息。
1、首先我创建一个名叫叫 share.js 的文件(PS:我们的需求就是聊天页面分享的是用户的头像和下载页,其他的都是公众号本身)
//这里的a为了区分是不是聊天页面,和分享不同很信息。很巧妙的一个用法
var setShareData = function(a){
//这里我们给一个默认值
var linkUrl = 'http://www.qinqimaifang.cn/qmspa/index.html';
var imgUrl = 'http://www.qinqimaifang.cn/qmspa/img/logo.png';
if(a>0){
linkUrl = sessionStorage.getItem('linkUrl');
imgUrl = sessionStorage.getItem('imgUrl');
};
wx.onMenuShareTimeline({
title: '如果买房时有困惑,来“亲戚买房”找他',
link: linkUrl,
imgUrl: imgUrl,
success: function (res) {
// 用户确认分享后执行的回调函数 },
cancel: function (res) { }
});
// 分享给朋友
wx.onMenuShareAppMessage({
title: '如果买房时有困惑,来“亲戚买房”找他',
desc: '地产老总一对一解答买房疑惑',
link: linkUrl,
imgUrl: imgUrl,
success: function () { },
cancel: function () { }
});
};
2, 监听路由事件$rootScope.$on
这里也是我们今天解决问题的重点所在,因为我们用的是ui-rooter,所以我们要想知道用户是不是在当前聊天页面。
$rootScope.$on('$stateChangeStart',function(event, toState, toParams, fromState, fromParams){
console.log(toState.name);
//这里判断当前的是不是聊天页面
if( 'tab.consultant_QA'.indexOf( toState.name)>=0 ){
// event.preventDefault();
//如果是就就传递参数1
setShareData(1);
}else{
//反之就是其他信息了
setShareData(0);
}
});
3. 调用
最后一步就是调用了,我们只需要在聊天的页面调用我们在share.js中定义的方法
//聊天页面controller
setShareData(1); //这里的传值很重要,因为是要判断你分享的是什么哦 //初始化页面的controller
setShareData(1);
举一反三
什么是举一反三,聪明的小伙伴都知道,就是在这个问题上我们就可以学习到怎么监听路由事件,之前我们知道angular加载一遍之后就不会重新的加载了,那时候第一想到的就是广播事件,现在我们是不是可以利用监听路由来巧妙的解决了呢?当然更多的问题都可以使用的。不仅仅限制微信分享的。今天分享就到这里了。祝大家学习愉快。
PS:代码优化可能不好,也许有更好的方法,欢迎大家一起来讨论哦!
ionic单页面应用中微信分享的问题总结的更多相关文章
- vue 单页应用中微信支付的坑
vue 单页应用中微信支付的坑 标签(空格分隔): 微信 支付 坑 vue 场景 在微信H5页面(使用 vue-router2 控制路由的 vue2 单页应用项目)中使用微信 jssdk 进行微信支付 ...
- vue单页面应用中动态修改title
https://www.jianshu.com/p/b980725b62e8 https://www.npmjs.com/package/vue-wechat-title 详细信息查看:vue-wea ...
- 解决vue单页面应用做微信JSSDK注入权限时出现“invalid signature”(ios端)
--都说微信开发多坑,没想到遇到一个天坑. 在做一个vue项目时,要用到微信JS-SDK,官方文档详见:https://developers.weixin.qq.com/doc/offiaccount ...
- android APP 中微信分享功能实现 的总结
//花了很长时间最终完成了微信分享功能,中间走了很多弯路,在此做一下小结,希望对在应用中使用到微信分享的朋友有所帮助. 主要问题就是下面两个: 1.为什么运行了项目之后,微信分享只是闪了一下就没有了? ...
- 【重点突破】—— 百度地图在React单页面应用中的使用
前言:百度地图是网页中使用地图的常用第三方工具,这里结合React项目中学到的应用场景总结一些使用要点. 一.在网页中嵌入百度地图 搜百度地图开放平台,注册百度开发者账号 控制台:查看应用.创建应用( ...
- ShareSDK中微信分享错误总结
项目中用到微信分享,可向好友或朋友圈分享链接时,分享人可以打开网站,查看消息者却始终不能打开网站.试了N种方法,重写了N次分享模块,均没办法解决. 在无意中查看分享链接时发现,朋友圈里分享后,原始链接 ...
- 纯JS单页面赛车游戏代码分享
分享一个以前写的小游戏,纯js游戏,代码很简单.欢迎大家来喷呦! 效果图: 代码展示://直接复制到html文件即可 支持IE9+版本 <!DOCTYPE html> <html&g ...
- 在Vue单页面应用中使用Promise链式调用
eg: this.commonLoginFun().then((res) => { if (res.errNo === 0) { const { isLogin } = res.data; if ...
- vue单页面项目中解决安卓4.4版本不兼容的问题
1.cnpm安装 cnpm i babel-polyfill --save cnpm i es6-promise --save 2.main.js引入 import ‘babel-polyfill‘ ...
随机推荐
- DDS转换工具
本工具用于将(长宽均为 2 的指数次幂的)图像文件如 PNG.TGA.BMP.JPG 等转换为 DDS 图像(DXT 压缩类型可选,DXT1~DXT5),也可将 DDS 图像转换回此几种格式图片. 截 ...
- 【Treap】bzoj1588-HNOI2002营业额统计
一.题目 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司 ...
- 工作中积累整理-CSS样式表(一)
[layout] clear:该属性的值指出了不允许有浮动对象的边. 默认值:none none: 允许两边都可以有浮动对象 both: 不允许有浮动对象 left: 不允许左边有浮动对象 right ...
- VirtualBox 共享文件夾
説明:host為window10,guest為centos7 一.安装VBoxLinuxAdditions 1. 在guest上挂载virtualbox安装目录下的VBoxGuestAdditions ...
- 动态规划(DP)
一.基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划. 二.基本思想与策略 基本 ...
- String常用方法测试
String.Equals()使用方法 用来比较String两个对象所表示的字符串是否相同 public class StringEquals { public static void main(St ...
- 新课程开始的第二天,HTML基础制作
天正式开始学习HTML的基础制作,有简单的指令开始入手. 第一天的学习,因为基础,所以觉得还算简单,主要是对网页背景.图片.文字.表格等的编辑,和一部分链接的使用. 由下面的的一个事例,通过所学的简单 ...
- VMware Ubuntu Kaldi
1.VMware10.0 秘钥网上搜就好了 2.ubuntu12.04 (1)安了几次14.04,16.04,12.04,最后窗口和分辨率的bug 还是没有解决 (2)终端显示菱形乱码的解决:直接用英 ...
- 01.总结的javascript-DOM/BOM集合
javascript总结: javascript 主要包括三个部分:1.DOM; 2.BOM; 3.ECMAscript 一.DOM(对象文档模型) 1.几个重要概念: 1)dom节点:元素,属性,文 ...
- VMware虚拟机12安装linux系统
http://jingyan.baidu.com/article/4f7d5712d20a1b1a21192760.html 阿里云开源镜像站:http://mirrors.aliyun.com/
