Vue项目history模式下微信分享爬坑总结

yizhihongxing

「Vue项目history模式下微信分享爬坑总结」这篇攻略主要是在Vue项目开发中,针对微信分享的一些问题和解决方案进行总结,并重点介绍了在使用history模式下遇到的问题和解决方法,下面是详细的攻略:

1. 什么是Vue项目history模式下的微信分享?

在Vue的路由模式下,有两种路由方式:hash和history。history模式利用了HTML5 History Interface中新增的pushState()和replaceState()方法,用来完成URL的变化,而不需要重新加载页面。同时,history模式也会出现一些问题,尤其是在微信分享的时候。

2. 微信分享的问题

在微信分享中,我们需要在页面的头部加入如下代码:

<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script>
  wx.config({
    // 配置信息
  });

  wx.ready(function() {
    // 分享信息
  });
</script>

然而,在使用history模式后,页面切换的时候,并不会重新加载页面,而是通过路由切换。这样就会导致以上代码只会在第一次加载时生效,后面的路由切换都没有再次加载。因此,我们需要解决这个问题,让微信分享在每次路由切换的时候都能够生效。

3. 解决方案

为了解决这个问题,我们可以在Vue项目中使用Vue Router的导航守卫实现在每次路由切换时都重新加载页面。具体有两种方法:

3.1 利用beforeEach导航守卫

在路由配置文件中,我们可以使用beforeEach导航守卫监听路由变化事件,当路由变化的时候,重新加载一遍页面。代码示例如下:

router.beforeEach((to, from, next) => {
  window.location.reload();
  next();
});

这种方法的缺点在于,无论是路由变化还是其他的原因,都会重新加载页面。

3.2 利用微信API的重新加载事件

在微信分享的API中,我们可以监听在“分享成功”、“分享失败”、“取消分享”等事件,当这些事件触发的时候,重新加载一遍页面。代码示例如下:

wx.ready(function() {
  // 分享信息

  wx.onMenuShareTimeline({
    success: function() { // 分享到朋友圈成功
      window.location.reload();
    },
    fail: function() { // 分享到朋友圈失败
      window.location.reload();
    },
    cancel: function() { // 分享到朋友圈取消
      window.location.reload();
    }
  });

  wx.onMenuShareAppMessage({ // 分享到微信好友
    success: function() {
      window.location.reload();
    },
    fail: function() {
      window.location.reload();
    },
    cancel: function() {
      window.location.reload();
    }
  });
});

这种方法的好处在于只会重新加载页面,当触发其他事件时不会重新加载页面。

4. 示例说明

4.1 利用beforeEach导航守卫的示例

在路由配置文件中,我们可以像下面这样监听路由变化事件:

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const routes = [
  // 路由配置
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

router.beforeEach((to, from, next) => {
  window.location.reload();
  next();
});

export default router

这种方法的缺点在于,无论是路由变化还是其他的原因,都会重新加载页面。

4.2 利用微信API的重新加载事件的示例

在微信分享的API中,我们可以像下面这样监听微信分享的事件:

import wx from 'weixin-js-sdk'

export function shareWX() {
  wx.ready(function() {
    wx.onMenuShareTimeline({
      success: function() { // 分享到朋友圈成功
        window.location.reload();
      },
      fail: function() { // 分享到朋友圈失败
        window.location.reload();
      },
      cancel: function() { // 分享到朋友圈取消
        window.location.reload();
      }
    });

    wx.onMenuShareAppMessage({ // 分享到微信好友
      success: function() {
        setTimeout(() => {
          window.location.reload();
        }, 500);
      },
      fail: function() {
        setTimeout(() => {
          window.location.reload();
        }, 500);
      },
      cancel: function() {
        setTimeout(() => {
          window.location.reload();
        }, 500);
      }
    });
  });

  // 配置信息
}

这种方法的好处在于只会重新加载页面,当触发其他事件时不会重新加载页面。

5. 总结

Vue项目在使用history模式时,微信分享会遇到一些问题。我们可以通过使用Vue Router的导航守卫或者微信API的重新加载事件来解决这个问题。同时在分享的时候,还需要注意图片的大小和链接的正确性,这也是会影响分享效果的原因。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue项目history模式下微信分享爬坑总结 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 微信小程序 前端源码逻辑和工作流详解

    微信小程序前端源码逻辑和工作流详解 微信小程序是一种轻量级的应用程序,可以方便地在微信中直接使用,不需要下载安装,用户可以直接使用。 在小程序前端的开发中,我们需要考虑的方面有很多,包括小程序的生命周期、组件、页面布局、API调用等等。本文将对微信小程序前端的源码逻辑和工作流程进行详解。 小程序前端源码逻辑 小程序的前端源码结构一般包括app.js、app.…

    JavaScript 2023年6月10日
    00
  • jQuery实现带有洗牌效果的动画分页实例

    首先让我们来理解一下这个问题的背景和要求。 背景: 现代网站中要求使用分页功能来展示大量数据。然而,单调的翻页效果会显得呆板,缺乏吸引力。因此,我们可以考虑使用带有动画效果的分页实例来增强用户体验。 要求: 本题要求我们使用jQuery来实现一个带有洗牌效果的动画分页实例。需要考虑用户界面的美观度和代码优雅性。 接下来我们开始讲解具体的实现方法。我们需要分为…

    JavaScript 2023年6月11日
    00
  • JS如何操作DOM基于表格动态展示数据

    操作DOM基于表格动态展示数据是Web开发中常用的技术。JavaScript是DOM操作的主力军。下面是操作DOM基于表格动态展示数据的完整攻略: 1. 数据渲染 在JavaScript中,可以通过插值表达式、DOM操作等方式将数据渲染到HTML页面。下面我们将介绍两个渲染数据的示例。 1.1 使用innerHTML渲染表格 使用innerHTML属性,可以…

    JavaScript 2023年6月10日
    00
  • bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法

    对于这个话题,我们需要分开来看待。首先,我们需要了解 bootstrap 和 jQuery dataTable 的基本用法,然后再介绍如何异步刷新表格数据。 什么是 Bootstrap 和 jQuery DataTable? Bootstrap 是一个 web 开发框架,可以帮助开发者快速构建响应式的网站前端。它提供了许多常用的 UI 组件,如表单、导航、按…

    JavaScript 2023年6月11日
    00
  • js 数字、字符串、布尔值的转换方法(必看)

    JS 数字、字符串、布尔值的转换方法 转换为数字 parseInt() parseInt() 函数可将一个字符串转换为整数。 let str = ’15px’; let num = parseInt(str); console.log(num); // 15 可以设置第二个参数表示进制。 let str = ‘1011’; let num = parseIn…

    JavaScript 2023年5月28日
    00
  • JavaScript数组Array的一些常用方法总结

    JavaScript数组Array的一些常用方法总结 什么是JavaScript数组? JavaScript数组(Array)是一组按照顺序排列的值的集合。值可以是任何数据类型。数组中的元素可以通过索引值进行访问。 常用方法 1.添加元素 push() 将一个或多个元素添加到数组的末尾,并返回新数组的长度。 语法: array.push(element1, …

    JavaScript 2023年5月27日
    00
  • JavaScript 中创建私有成员

    创建私有成员在 JavaScript 中是非常常见和重要的需求。可以利用 JavaScript 中的作用域和闭包机制来实现。 在JavaScript中可以通过函数的声明来创建一个私有作用域,在函数中声明的变量和函数都是内部私有的,从而实现私有成员。 具体实现过程如下: 创建一个外部函数,内部定义需要私有的成员。 function myObject() { /…

    JavaScript 2023年6月10日
    00
  • js实现类似于add(1)(2)(3)调用方式的方法

    要实现类似于 add(1)(2)(3) 这样的调用方式,我们可以使用 JavaScript 的闭包机制实现。以下是具体的实现步骤: 首先定义一个函数 add,它返回另一个函数; 返回的这个函数中,我们定义一个变量 sum,来保存函数所有调用参数的总和。并返回一个新的函数,用于下一次的调用; 新的函数中,使用闭包的方式,把前面的参数和当前的参数相加,然后返回一…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部