Vue(七)SPA 单页面及应用方式「建议收藏」

Vue(七)SPA 单页面及应用方式「建议收藏」vue:单页面应用SPA。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

目录

SPA(Single Page Application) 单页面应用 

1. 单页面应用与多页面应用对比

2. 单页面应用步骤

3. SPA路由跳转


SPA(Single Page Application) 单页面应用 

        单页面是指整个应用程序只有一个唯一完整的 HTML 页面,而其它所谓的页面,其实都是组件片段而已,切换页面也只是切换一个 HTML 中显示不同的组件片段。在今后所有的开发项目都是单页面应用。

1. 单页面应用与多页面应用对比

多页面应用

单页面应用

请求次数

每切换一次页面,都向服务器端重新发送请求;反复切换页面就会反复发送请求,请求次数多。

在首次加载时,就将唯一完整的HTML页面和所有其余页面组件一起下载下来,即使反复切换页面也不需要反复向服务器发送请求,请求次数绝对少。

公共资源

每次切换页面,都要重新请求页面中的bootstrap.cssjquery.jsbootstrap.js等多个页面都要用到的资源,请求次数多加载慢。

每次切换页面时,唯一完整的HTML外壳没有切换,所以不会重复发送请求,下载cssjs文件,请求次数又少了很多,同时加载效率高。

加载效率

每次切换页面,都要删除旧的整棵DOM树,重建整棵DOM树,效率低。

每次切换页面时,因为只跟换部分组件片段显示,整个页面没有更换,DOM树也只更换部分节点,不用重建整棵DOM树,效率高。

页面切换动画

几乎不可能实现页面切换动画,因为页面切换需要同时看到前一个页面的后一半以及后一个页面的前一半;多页面应用不可能两个页面同时存在,所以无法实现。

比较容易实现页面切换动画,因为单页面应用的所有页面组件已经同时保存在客户端了,同时显示也是有可能的。

2. 单页面应用步骤

(1)先创建唯一完整的 HTML 页面(一个支持 vue 基本结构的空页面)

<script src="js/vue.js">

<body>
  <div id="app">

  </div>
  <script>
    new Vue({
      el: "#app",
    })
  </script>
</body>

(2)创建所有”页面”组件文件

        a. 项目中,有几个”页面”,就要创建几个页面组件文件;

        b. 所有页面组件都要集中放在一个名为 views 的文件夹中;

        c. 每个页面组件其实都是一个子组件;

        d. 在唯一完整的 HTML 页面顶部引入页面组件;

        e. 创建 404 页面组件,在唯一完整的 HTML 页面顶部引入,加入到路由字典中最后一项:

{ path:"*", component:NotFound }
//其中“*”表示除正确输入之外的所有情况

(3)创建路由器对象

        a. 在唯一完整的 HTML 页面顶部引入 vue-router.js(官方);

        b. 创建路由器对象。先将路由器对象保存在 router/index.js 文件中;然后先创建路由字典,再创建路由器对象;

//创建路由器字典
var routes=[
   {path:"/相对路径", component:页面组件对象名},
   ...
 ]

//创建路由器对象
var router=new VueRouter({ routes })

        c. 引入到唯一完整的 HTML 页面中;

<script src=“router/index.js”>

        d. 将 router 对象加入到 new Vue() 中,这样 router 对象才可以修改页面中的内容;

new Vue({
   el:"#app",
   router
 })

        e. 在唯一完整的 HTML 页面中 <div id=”app”> 内,添加 <router-view></router-view> 标签,用于为将来的页面组件占位。 

补充:路由器对象的三大功能(高频笔试面试)

        监视地址栏变化;

        查找当前路径对应的页面组件;

        将找到的页面组件替换到<router-view>的位置。

(4)创建除页面以外的其它全局组件或子组件(如页头)

        a. 所有不足以成为一个页面的组件片段都要集中创建在 components 文件夹中;

        b. 所有的组件,暂时都创建为子组件,且都要在唯一完整的 HTML 页面中引入;

        c. 如果是全局组件,只要在 new Vue() 之前,使用 Vue.component() 将子组件对象转为全局组件即可。

Vue.component("组件标签名", 组件对象名);

        如果所有页面都需要显示页头,则只要在 <router-view> 上方添加 <页头组件> 标签即可;如果有的页面有页头,有的页面不需要页头,就只在那些需要页头的组件中添加 <页头组件>。

一个完整的单页面应用文件结构如下:

Vue(七)SPA 单页面及应用方式「建议收藏」

3. SPA路由跳转

(1)在 HTML 中写死的跳转连接

<router-link to="/相对路径">文本</router-link>

        <router-link to=”/xxx”</router-link> 会被翻译为 <a href=”xxx”></a>,翻译过程中 vue 会对 a 做一些自动的加工。

(2)在程序中自动跳转

 this.$router.push("/相对路径")

(3)路由跳转传参

        a. 配置路由字典中的路由字典项;

{ path:"/相对路径/:变量名", component: 页面组件对象名, props:true}

//:变量名 表示为上个页面传到下个页面的值起一个变量名,便于重复使用
//props:true 让地址栏中的上个页面传来的值,自动掉入下一个页面的props中成为一个外来属性/变量

        b. 跳转时携带参数值到下个页面;

<router-link to="/相对路径/参数值">
//或者
this.$router.push("/相对路径/参数值")

//路由传参,在路由字典项的path中定义变量时必须加:
//但在跳转时传参时既不用加:也不用加变量名,写参数值即可

        c. 在下个页面中直接使用 props 中外部传来的变量。

props:[ "变量名" ]

        如下:
Vue(七)SPA 单页面及应用方式「建议收藏」


举例:实现单页面应用(以上述文件结构为基础);

        index.html

<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="js/vue.js"></script>
  <script src="js/vue-router.js"></script>
  <script src="views/Detail.js"></script>
  <script src="views/Index.js"></script>
  <script src="views/NotFound.js"></script>
  <script src="router/index.js"></script>
  <script src="components/MyHeader.js"></script>
</head>
<style>
  .router-link-exact-active {
    background-color: rgb(78, 75, 75);
    width: 50px;
    padding: 5px;
    border-radius: 5px;
    color: white;
    text-decoration: none;
  }
</style>

<body>
  <div id="app">
    <!--为所有页面添加页头-->
    <!-- <my-header></my-header> -->
    <router-view></router-view>
  </div>
  <script>
    //将普通子组件MyHeader转为全局组件
    Vue.component("my-header", MyHeader);

    new Vue({
      el: "#app",
      router
    })
  </script>
</body>
</html>

        views/Index.js

var Index = {
  template: `
    <div>
      <my-header></my-header>
      <h1 style="color:red">这里是首页</h1>
      <button @click="goto(1)">查看1号商品详情</button>
      <button @click="goto(5)">查看5号商品详情</button>
      <button @click="goto(13)">查看13号商品详情</button>
    </div>
  `,
  methods: {
    goto(lid) {
      // 程序中自动跳转
      this.$router.push(`/detail/${lid}`)
    }
  }

}

        views/Detail.js

var Detail = {
  props: ["lid"],
  template: `
    <div>
      <my-header></my-header>
      <h1 style="color:blue">这里是详情页</h1>
      <h2>显示{
  
  {lid}}商品的详细信息...</h2>
    </div>
  `
}

        views/NotFound.js

var NotFound = {
  template: `
  <div>
    <h2 style="color:yellow">404:嘿!走到哪儿了!</h2>
  </div>
  `
}

        router/index.js

var routes = [{
    path: "/", //用户运行后直接进入首页
    component: Index
  },
  {
    path: "/detail/:lid",
    component: Detail,
    props: true
  },
  {
    path: "*", //除输入正确之外的所有情况
    component: NotFound
  }
];
var router = new VueRouter({
  routes
});

        components/MyHeader.js

var MyHeader = {
  template: `<div>
    <h1 style="color:orange">这里是页头</h1>
    <ul>
      <li><router-link to="/">首页</router-link></li>
      <li><router-link to="/details">详情页</router-link></li>
    </ul>
    <hr>
  </div>`
}

效果如下:

        在首页时,首页高亮显示;

Vue(七)SPA 单页面及应用方式「建议收藏」

        点击第一个按钮; 

Vue(七)SPA 单页面及应用方式「建议收藏」

        404界面;

Vue(七)SPA 单页面及应用方式「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182563.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux查看当前用户及其权限管理[通俗易懂]

    Linux查看当前用户及其权限管理[通俗易懂]linux查看当前用户cwhoami或whoami或whomomlikes[ec2@ip-10-10-5-79~]$whoami创建用户打开终端,输入:sudoadduser[用户名][ec2@ip-10-10-5-79~]$sudoadduserxiaozhou切换用户打开终端,输入:su[用户名]或者su-l[用户名][ec2@ip-10-10-5-79~]$suxiaozhou用户组在Linux系统中,每个用户都有一个归属(用户组

    2022年5月29日
    49
  • 2021Java高级面试题及答案,太牛了!

    2021Java高级面试题及答案,太牛了!什么是RPC?RPC原理是什么?什么是RPC?RPC(RemoteProcedureCall)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。比如两个不同的服务A、B部署在两台不同的机器上,那么服务A如果想要调用服务B中的某个方法该怎么办呢?使用HTTP请求当然可以,但是可能会比较慢而且一些优化做的并不好。RPC的出现就是为了解决这个问题。RPC原理是什么?服务消费方(client)调用以本地调用方式调用服务;client

    2022年7月18日
    18
  • Oracle 10g AND Oracle 11g手工建库案例–Oracle 11g「建议收藏」

    Oracle 10g AND Oracle 11g手工建库案例–Oracle 11g

    2022年1月23日
    36
  • px2rem配置_px和rem转换器

    px2rem配置_px和rem转换器安装px2rem后,再使用px上有些不同,大家可以参考px2rem官方介绍,下面简单介绍一下。直接写px,编译后会直接转化成rem—-除开下面两种情况,其他长度用这个在px后面添加/*no*/,不会转化px,会原样输出。—一般border需用这个在px后面添加/*px*/,会根据dpr的不同,生成三套代码。—-一般字体需用这个 …

    2022年10月23日
    0
  • 回归的认识以及OLS回归[通俗易懂]

    回归的认识以及OLS回归[通俗易懂]回归分析是统计学的核心,其实是一个广义的概念,通常指那些用一个或多个预测变量(自变量或解释变量)来预测响应变量(因变量、校标变量或结果变量)的方法。回归分析可以用来挑选与响应变量相关的解释变量,可以描述两者的关系,也可以生成等式,通过解释变量来预测响应变量。回归分析可以解释的部分问题,举例:预测人在跑步机上锻炼时消耗的卡路里数。其响应变量就是消耗的卡路里数,预测变量可以很多,比如锻炼时间、目标心率的时间比、平均速度、年龄、性别和身体质量指数(BMI)。从理论上来说,回归分析可以帮助解释如下问题:

    2025年6月2日
    0
  • Unity安装 ILRuntime插件

    Unity安装 ILRuntime插件unity2019.4.2f1c1在packagemanager里面找不到ILRuntime插件解决办法:编辑项目下Packages的manifest.json文件,添加如下代码贴出来方便大家复制自己需要的部分{“scopedRegistries”:[{“name”:”ILRuntime”,”url”:”https://registry.npmjs.org”,”scopes”:[…

    2022年6月27日
    78

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号