Angular——单页面与路由的使用

单页面

SPA(Single Page Application)指的是通单一页面展示所有功能,通过Ajax动态获取数据然后进行实时渲染,结合CSS3动画模仿原生App交互,然后再进行打包(使用工具把Web应用包一个壳,这个壳本质上是浏览器)变成一个“原生”应用。

在PC端也有广泛的应用,通常情况下使用Ajax异步请求数据,然后实现内容局部刷新,局部刷新的本质是动态生成DOM,新生成的DOM元素并没有真实存在于文档中,所以当再次刷新页面时新添加的DOM元素会“丢失”,通过单页面应可以很好的解决这个问题。

路由

在后端开发中通过URL地址可以实现页面(视图)的切换,但是AngularJS是一个纯前端MVC框架,在开发单页面应用时,所有功能都在同一页面完成,所以无需切换URL地址(即不允许产生跳转),但Web应用中又经常通过链接(a标签)来更新页面(视图),当点击链接时还要阻止其向服务器发起请求,通过锚点(页内跳转)可以实现这一点。

实现单页面应用需要具备:

a、只有一页面

b、链接使用锚点

基本原理

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        .clearfix:after {
            content: ‘‘;
            display: block;
            visibility: hidden;
            clear: both;
        }

        .wrap {
            width: 600px;
            margin: 30px auto;
        }

        ul {
            list-style: none;
            border: 1px solid black;
            border-bottom: none;
        }

        li {
            width: 199px;
            height: 30px;
            line-height: 30px;
            float: left;
            /*margin-left: -2px;*/
            text-align: center;
            position: relative;
        }

        li a {
            text-decoration: none;
            color: black;
        }

        li:after {
            content: ‘‘;
            display: block;
            position: absolute;
            width: 1px;
            height: 16px;
            border-right: 1px solid black;
            top: 7px;
            right: 0px;
        }

        li:last-child:after {
            border: none;
        }

        .wrap .main {
            height: 400px;
            border: 1px solid #000;
            text-align: center;
            line-height: 400px;
        }
    </style>
</head>
<body>
<div class="wrap">
    <ul class="clearfix">
        <li><a href="#index1">index1</a></li>
        <li><a href="#index2">index2</a></li>
        <li><a href="#index3">index3</a></li>
    </ul>
    <div class="main">
    </div>
</div>
<script>
    //js有一个监听锚点变化的事件 hashchange
    window.addEventListener(‘hashchange‘, function (ev) {
        var hash = location.hash;
        hash = hash.slice(1);
        console.log(hash);
        var xhr = new XMLHttpRequest();
        xhr.open(‘get‘, ‘01.php?hash=‘ + hash);
        xhr.send(null);
        xhr.onreadystatechange = function (ev2) {
            if (xhr.readyState == 4 && xhr.status == 200) {
                document.querySelector(‘.main‘).innerHTML = xhr.responseText;
            }
        }
    })
</script>
</body>
</html>

通过上面的例子发现在单一页面中可以能过hashchange事件监听到锚点的变化,进而可以实现为不同的锚点准不同的视图,单页面应用就是基于这一原理实现的。AngularJS对这一实现原理进行了封装,将锚点的变化封装成路由(Route),这是与后端路由的根本区别。

原文地址:https://www.cnblogs.com/wuqiuxue/p/8432088.html

时间: 2024-10-08 21:49:11

Angular——单页面与路由的使用的相关文章

Vue 子路由 与 单页面多路由 的区别

跟着学完了基础课程,打算整理一波笔记,对基本概念梳理一遍,惊觉对子路由和单页面多路由混淆的一塌糊涂. 果然,基础课程的坑新手是体会不到的. 由于子路由仅嵌套了一层,多路由给了左右两个组件,而且两个都是在默认组件下进行的.于是,妥妥误会俩作用一样.我发现自己问题,并尝试网上找到区别时,发现并没有人写出来.只好去官网看了一下文档. 哇塞,真是一语惊醒梦中人啊!!! 上面就是官网对子路由的解释,人家说的很清楚了,嵌套路由!!!是一层层嵌套的!!! 再看看传说中的多路由是啥 嗯,也不叫多路由,而是叫命名

第4节:单页面多路由区域操作

这节课我们讲"单页面多路由区域操作",实际需求是这样的,在一个页面里我们有2个以上<router-view>区域,我们通过配置路由的js文件,来操作这些区域的内容.例如我们在src/App.vue里加上两个<router-view>标签.我们用vue-cli建立了新的项目,并打开了src目录下的App.vue文件,在<router-view>下面新写了两行<router-view>标签,并加入了些CSS样式. 1 2 3 <rout

单页面应用路由的实现方式

什么是 SPA? SPA就是单页面应用,即single page application,通过看代码就可以发现,整个网站就只有一个Html文件. WHY SPA? 减小服务器压力. 如果不用SPA,那么我们每次切换页面的时候,就会向服务器发送一个请求,服务器返回一个html文件:但是如果使用了SPA,在切换时,不需要请求服务器,只要通过本地的js来切换即可.并且服务器端就不需要配置路由,完全做到了前后端分离,这对于分工合作的意义可想而知. 增强用户体验,增加app的使用流畅性. 做过spa的同学

nignx部署Vue单页面刷新路由404问题解决

在linux下搭建nginx测试网页的时候,正常打开可以访问,当刷新后页面出现404 not found的问题 说明: vue-router 默认 hash 模式 -- 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载. 如果不想要很丑的 hash,我们可以用路由的 history 模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面. const router = new VueRouter({

phantomjs和angular-seo-server实现angular单页面seo

1.下载phantomjs,并配置环境变量为   eg:E:\phantomjs-2.1.1-windows\bin 2.下载angular-seo-server 3.windows下:cmd eg:phantomjs --disk-cache=no D:\nginx-1.10.0\angular-seo-server.js 9090 http:127.0.0.1/fengdai_pc 4.git命令下:eg:curl 'http://localhost:9090/?_escaped_fragm

angular(一)路由的配置

本篇文章是最近在公司里做项目的时候,尝试配置路由的过程.由于头尾,和路由主体,包括控制器组长都已配置好,我这里只是单纯的写一些配置单个副页面的过程.大家肯定会有看不懂的地方,后续会陆续更新完整的配置全套路由的方法.如果想看完整的配套路由方法,抱歉,让你们失望了,我也是个程序媛小白一枚~~~. 好,现在切入正题:我工作的步骤如下: 一.分别在css,js,tpls文件夹里面比照同事建立文件夹,然后将原静态页面的css,HTML等导入: ①首先是css,直接复制粘贴原有静态页面的css到新建css文

浅谈HTML5单页面架构(三)—— 回归本真:自定义路由 + requirejs + zepto + underscore

本文转载自:http://www.cnblogs.com/kenkofox/p/4650310.html 不过,这一篇,我想进一步探讨一下这两个框架的优缺点,另外,再进一步,抛开这两个框架,回到本真,自己搞个简单的路由一样可以实现单页面. 这个对于刚做前端开发的新同学来说就最好不过了,如果一来到岗位就一大堆angular.backbone.requirejs,看资料都看一两周.其实大家最熟悉的东西还是那个美元$,用美元能解决的问题,就不要麻烦到angular.backbone大爷了. 事先说明,

浅谈HTML5单页面架构(一)——requirejs + angular + angular-route

本文转载自:http://www.cnblogs.com/kenkofox/p/4643760.html 心血来潮,打算结合实际开发的经验,浅谈一下HTML5单页面App或网页的架构. 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验最好,更像原生app.简单来说,单页面App不需要频繁切换网页,可以局部刷新,整个加载流畅度会好很多. 废话就不多说了,直接到正题吧,浅谈一下我自己理解的几种单页面架构: 1.requirejs

AngularJS单页面路由配置恩,理解了就很简单啦

利用route实现单页面跳转功能 利用angularJS开发流程 1)配置好angularJS开发环境 2)利用 yo angular projectname创建项目目录 3)删除掉系统自动生成的一些自己工程不需要的页面和脚本 4)修改index.html,在 <!-- Add your site or application content here --> 以上注释下面写自己的样式内容,关键是 <div class="container-fluid" id=&qu