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),这是与后端路由的根本区别。
具体使用
在angular的路由模块中,也实现了此功能,其原理如上。route模块之前是包括在angular核心代码中,后来分离出来,需要单独去引用才能使用
1、引入angular-route.js
2、实例化模块(App)时,当成依赖传进去(模块名称叫ngRoute)
3、配置路由模块
4、布局模板,通过ng-view指令布局模板,路由匹配的视图会被加载渲染到些区域。
路由参数:
when只需要两个参数,otherwise需要一个参数
1、when的第1个参数是一个字符串,代表当前URL中的hash值。
2、when的第2个参数是一个对象,配置当前路由的参数,如视图、控制器等。
a、template 字符串形式的视图模板
b、templateUrl 引入外部视图模板
c、controller 视图模板所属的控制器
d、redirectTo跳转到其它路由
<!DOCTYPE html> <html lang="en" ng-app="App"> <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 ng-view=""></div></div> </div> <script src="../libs/angular.min.js"></script> <script src="../libs/angular-route.js"></script> <script>//之前路由模块也是处于核心模块之中,后来独立出去了//对路由模块的使用主要是进行config配置,配置完成之后即可使用var App = angular.module('App', ['ngRoute']);App.config(['$routeProvider', function ($routeProvider) {$routeProvider.when('/index1', {template: '<h1>index1</h1>'}).when('/index2', {template: '<h1>index2</h1>'}).when('/index3', {template: '<h1>index3</h1>'}).otherwise({redirectTo: '/index1'})}]); </script> </body> </html>
转载于:https://www.cnblogs.com/wuqiuxue/p/8432088.html
Angular——单页面与路由的使用相关推荐
- nignx部署Vue单页面刷新路由404问题解决
nignx部署Vue单页面刷新路由404问题解决 参考文章: (1)nignx部署Vue单页面刷新路由404问题解决 (2)https://www.cnblogs.com/wuchenggong/p/ ...
- vue 扫码页面限制区域_Vue.js 单页面多路由区域操作的实例详解
单页面多路由区域操作 在一个页面中有两个及以上的区域,需要通过设置路由的index.js,来操作这些区域的内容 app.vue 中设置: index.js中设置: import vue from 'v ...
- Vue入坑——vue-router单页面多路由配置
2019独角兽企业重金招聘Python工程师标准>>> 上一篇:vue-router如何传递参数 一起学vue--vue学习总路线 ----------^~^我是萌萌哒分割线^~^- ...
- VUE 返回上一页 不刷新页面、重复进入同一页面created重复执行、每次进入页面时都执行created、vue单页面多路由,前进刷新,返回不刷新
每次进入页面时都执行created.前进刷新,返回不刷新 思路: 利用 keep-alive与vue-router配合使用 ,判断哪些页面需要每次进入刷新,哪些页面不需要每次进入刷新: keepAli ...
- 容器化单页面应用中RESTful API的访问
最近在工作中,需要让运行在容器中的单页面应用程序能够访问外部的RESTful API.这个需求看起来并不困难,不过实现起来还是有些曲折的.在此,我就将这部分内容总结一下. 在入正题之前,有个一问题,就 ...
- (面试)单页面和多页面区别?
目录 定义 单页面 多页面 区别 刷新的方式 路由模式 结构 维护成本 加载资源文件 开发的成本 用户体验 转场动画 数据传递 搜索引擎优化(SEO) 使用范围 定义 单页面 只有一个对应的html页 ...
- 访问页面升级访问_容器化单页面应用中RESTful API的访问
最近在工作中,需要让运行在容器中的单页面应用程序能够访问外部的RESTful API.这个需求看起来并不困难,不过实现起来还是有些曲折的.在此,我就将这部分内容总结一下. 在入正题之前,有个一问题,就 ...
- angular(3)服务 --注入---自定义模块--单页面应用
ng内部,一旦发生值改变操作,如$scope.m=x,就会自动轮询$digest队列,触发指定的$watch,调用其回调函数,然后修改dom树. 干货:https://github.com/xufei ...
- 【前端路由原理--原生JS实现方式】--前后端路由的区别、关于单页面应用与多页面应用、什么是CSR、SSR、SSG、ISP
前言 本来只是想学习 React-Router v6 ,没有想到,带出了这么多东西.前后端路由有什么区别?SPA与MPA的是什么?在了解到前端路之后又发现单页面于应用与多页面应用的不同之处,以及 .n ...
最新文章
- 现在学java还是python好_该学Java还是Python?
- SAP WM Storage Type下不允许负库存的设置
- linux c openssl rsa 加解密
- 东北育才 数论专场第2场
- Android 三方库lottie、mmkv的使用
- open_links_per_instance 和 open_links 参数说明
- 进入postgresql
- VS 2010 和 .NET 4.0 系列之《WPF 4》篇
- mac下shell给文件名批量加前缀
- bytevalue_Java Number byteValue()方法与示例
- [c++]访MSN浮出窗口的示例
- 显卡、显卡驱动、CUDA、CUDA Toolkit、cuDNN 梳理
- 车辆抵押贷款风险分析
- c lambda表达式 select 改变字段名称_C博客作业01--分支、顺序结构 - 吖黑大帅
- 怎样使用OUTLOOK收发邮件 小雨
- python界面-图形界面
- sys.path.append 和 sys.path.insert辨析
- 微信iOS收款到账语音提醒开发总结
- 2017年总结--心情篇
- gtx1660是什么级别的_GTX1660显卡性能怎么样 gtx1660相当于什么显卡
热门文章
- nginx rewrite
- 【若依(ruoyi)】datetimepicker日期和时间插件
- 【SSL】java keytool工具操作java带的(JKS)证书库
- Linux 利用yum源安装nginx
- java getclass 相等_Java判断2个List集合是否相等(不考虑元素的顺序)
- processing图片粒子化_个人见到的processing(优质且全的教程,一定看原文)
- 苹果平板可以用html么,9.7寸ipad pro能用pencil吗?ipad pro全面支持Apple Pencil
- python定义x_Python 定义函数(示例代码)
- java调接口传值_关于调用第三方接口时传递参数是File类型的解决方式
- 推荐10个Github热门Python库,非常实用!