Coder Social home page Coder Social logo

elderjames / vue-router-storage Goto Github PK

View Code? Open in Web Editor NEW
93.0 5.0 9.0 1007 KB

A vue router storage solution. -If your vue application needs to jump to a third party page, and then jump back, want to restore to the original history and continue to operate, the use of this plug-in is the best solution.如果你的vue应用需要跳转到第三方页面,再跳转回来时,想恢复到原来的历史记录并继续操作,使用本插件是最好的解决方案。

License: MIT License

JavaScript 97.46% Shell 2.54%
vue vue-router-storage vue-router

vue-router-storage's Introduction

vue-router-storage

Version Author Download GitHub license

A solution to the Vue history routing Persistence.

中文文档

Warn:Current Version Just Support The History Mode!

Current function

  1. Persistent user browsing records, and automatically restores the original path when you re-enter(not refresh) the Vue application.
  2. When you enter the Vue application without history, the predecessor history is automatically created so that the application can 'return' to the previous page.
  3. When the route arrives at the root directory, prevent it from continuing to retreat (because it originally jumped from another site to this Vue application) and quit the Vue scope.
  4. The routing change triggers the advance (router.goforward), back (router.goback), overwrite (router.replace), and reach the root directory (router.inroot) events.

If your vue application needs to jump to a third party page, and then jump back, want to restore to the original history and continue to operate, the use of this plug-in is the best solution.

Why

Vue in the use of HTML5 history mode, through the browser for forward and backward operations. However, when the multi-level routing address directly in the address bar or jump from the external link to the Vue application multi-level routing, it will cause the history is lost, can not return to the embarrassing situation of the parent page. This program provides vue with historical refactoring and persistence capabilities to address the loss of historical records and the inability to roll back.

How

Based on the localStorage / cookie store, when the Vue instance is created, check whether the local history is saved or not. If not, save the route path and inject the route matching path into the browser history through the history.pushState method Record, the browser to get back to the higher-level routing; if you have saved history, the history will be injected into the browser, so that users can reopen the page to continue the last operation.

Screenshot

Use Setup

  1. The command line executes the npm installation package
# install vue-router-storage package
npm install --save vue-router-storage
  1. Add the following code to the entry file
import Vue from 'vue'
import RouterStorage from 'vue-router-storage'

//showLog: Print Internal log (default: false) stayHere: Limit not to exit Vue application (default true)
//instanceName: the name of the history instance object,which can be change when get conflict whit other plugin
Vue.use(RouterStorage, { showLog: false, stayHere: true , instanceName: '$history' });
  1. How to use

After using the above configuration, immediately produces the effect, the following is the other method and the event

//Get the history instance of this plugin
this.$history;

//Clear history
this.$history.clear();

//Listening for back events
vm.$on('router.goback', function () {
  console.log('goback event')
})

//Listening for replace events
vm.$on('router.replace', function () {
  console.log('replace event')
})

//Listening for forward events
vm.$on('router.goforward', function () {
  console.log('goforward event')
})

//Listening for trying leave vue app events(Triggered when Stayhere is true)
vm.$on('router.inroot', function () {
  console.log('inroot event')
})

//Listen for path changes in the component and get a list of paths
 watch: {
        '$history.routes'(val) {
            ///this.path = val;
        }
    }

Enjoy it!

Build Setup

# install dependencies
npm install

# serve with hot reload at localhost:8080
npm run dev

# build for production with minification
npm run build

# build for production and view the bundle analyzer report
npm run build --report

For detailed explanation on how things work, checkout the guide and docs for vue-loader.

vue-router-storage's People

Contributors

elderjames avatar ivanli-cn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

vue-router-storage's Issues

添加许多重复的路由的代价

举个例子:
这个库每次进入应用或刷新时会将LocalStorage存储的所有路由pushState一遍,如果用户从搜索引擎进入应用,并在使用的过程中多刷新了几遍,那么就会添加很多重复的路由到浏览器中。这样的代价就是:

  • 如果路由到达根目录时限制用户继续后退,用户就无法返回到搜索引擎页面;
  • 如果不限制,那么用户需要将之前的路由再重新返回完才能返回到搜索引擎页面。并且在chrome中,history最大长度为50,满了后再添加新的路由会将之前的历史记录清除掉,所以用户可能再也无法返回到搜索引擎页。

所以带来的最大问题就是用户进入该应用后无法方便的返回,并且破坏了用户的浏览记录,这可能会让用户很费解,“我只是刷新了几下,但是我的历史记录里就全部都是这个单页应用的地址了”。浏览器的历史记录里应该存放有对用户有意义的路由,希望以后浏览器能有更好的方案来让开发者安全地操作历史记录,从而方便用户的使用。

另一个问题就是当历史记录比较多时,刷新后白屏的事件比较长,因为history.pushState并没有那么快。

另外建议这个库的初始化尽量不要放在组件的钩子里做mixin会将代码混合到所有组件中,如果写得不好,很容易产生性能问题。

当然这要看具体的使用场景,但是作为开源的库的话,最好还是能覆盖尽可能多的使用场景,并且不破坏规范,期待能找到更好的方案。

hash模式报错

examples中的hash模式多刷新或返回一下,很容易出现findRepeat is not defined错误

增加配置项

1.是否阻止从根目录退出vue
2.是否在控制台打印日志

router history

带有二级路由的url,使用history模式后,刷新资源加载路径错误,比如:
访问hostUrl/a/b,结果资源原本的路径hostUrl/static/xxx.js 变成了hostUrl/a/static/xxx.js;
请问碰到过这种情况吗?

返回多层时产生的bug

examples中history模式,一次性返回好几层路由会产生一些问题。

重现方法:

  • history.go(-2)会报findRepeat is not defined错误
  • history.go(-3)历史记录会返回3层,但是库只识别出返回了一层

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.