码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-02-08 17:40:27      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:gpo   ati   innerhtml   请求   float   text   har   ash   style   

单页面

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),这是与后端路由的根本区别。

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

标签:gpo   ati   innerhtml   请求   float   text   har   ash   style   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!