问题

Vue对于单页面富应用的程序开发,有着非常友好的支持。简单到只需要通过 “ vue create 项目名称” 这一行命令,即可完成单页面富应用程序的所有环境配置.但多页面的程序呢?

通过vue脚手架vue-cli能帮助开发者快速的进行单页面应用的开发,但vue对于多页面应用的开发,可能就不是这么友好啦,你需要深入到webpack和vue的配置文件中,添加一系列的配置,才能在你原本的单页面应用中创建多个入口文件。详情请百度“vue多页面开发”。

小编查阅网上信息,发现用vue开发多页面应用,即耗时又耗力还不讨好。用vue开发单页面富应用的一大特点就是,第一次加载慢,但多个子页面间的跳转非常丝滑流畅。

如果按网上的方式,通过修改配置文件开发多页面应用,那就不止是第一次打开网页慢,之后的页面跳转速度也将下降。

因为通过配置文件添加多个入口,相当于将多个单页面应用进行整合,多个应用间的跳转,相当于重新加载了新的vue应用。

那如何用简单而又不损耗性能的方式来开发vue多页面应用呢?

方法

最简单的方法,就是对项目进行拆分,直接开发多个vue应用,这样就不用写配置文件,但性能损耗的问题还是存在。

那能不能直接在原有的单页面应用中开发多页面应用呢?相信有的读者应该这么干过。来个例子:

antdesign vue 一个页面两个modal vue项目多页面_python

 2.1 学堂在线网站首页

图2.1不就是vue开发的典型模板吗,通过点击导航栏不断切换网页的内容,但不刷新网页.(该网站并不是vue开发,只是以该网站的样式举例).

antdesign vue 一个页面两个modal vue项目多页面_编程语言_02

2.2 学堂在线课程详情页

图2.2 为点击具体课程后进入的详情页,如果用vue开发这个网站,很明显,首页和详情页是两个应用.需要用到多页面开发或者创建两个vue应用。

那如何通过一个vue应用来开发该网站,并且不用修改复杂的配置文件呢?

最简单的方式是不是换个导航栏就完事了,监听vue实例中的route对象,根据路由的变化显示对应导航栏即可。

但这样会不会引发其他问题呢?来思考一下。

所有子页面在配置路由时,可以用异步加载的方式,用户只有在查看对应子页面时,才会向服务器发送请求,这样再多的子页面也不会影响网页加载的速度。

//在router/index.js 中通过异步方法引入页面
const  Course=()=>import("../views/Course.vue")
const  Team=()=>import("../views/Team.vue")
const  MyCourse=()=>import("../views/MyCourse.vue")
const  Profile=()=>import("../views/Profile.vue")

 那主页面呢?相比于以往的单页面应用,主页面中多了一个导航栏。如果用户需要在主页和另一个带有导航栏的页面之间频繁跳转,那么最好的方式就是通过css 中的display 来隐藏其中一个导航栏即可。

如果用户不会在两个页面之间频繁跳转,如何优化呢?

同样的对于未显示的导航栏,采用异步加载的方式,当用户需要看见这个导航栏的时候,再从服务器请求,而不是一开始就加载。这样可以避免第一次加载过多的内容,而导致速度变慢。

//在主页面app.vue中异步加载导航栏组件
const  navBar=()=>import("./components/navBar/navBar.vue")
         export  default{
                   name:'app',
                   components:{
                            navBar
                   }}

同样的,这种方式也可以应用于其它页面内容的开发。