[Angularjs]视图和路由(一)
写在前面
对单页应用来讲,视图和路由的作用可以从一个视图跳转到另外一个视图,可以合理管理用户在使用过程中看到的界面。
将视图分解成布局和模版视图,并且根据用户当前访问的URL来展示对应的视图,将会是一种更好的做法。
我们会将这些模版分解到视图中,并在布局模版中进行组装。Angularjs允许我们在$route服务的提供者$routeProvider中通过声明路由实现该功能呢。
系列文章
[Angularjs]ng-select和ng-options
一个例子
在HTML中,需要引用AngularJS之后引用angular-route:
<script src="JS/angular.min.js"></script>
<script src="JS/angular-route.min.js"></script>
然后,要把ngRoute模块在应用中当作依赖加载进来:
<script>
var app = angular.module('app',['ngRoute']);
</script>
布局模板
创建一个布局模版,就是告诉angularjs把模板渲染到何处。通过将ng-view指令和路由组合到一起,我们可以精确的指定当前路由所对应的模板在dom中的渲染位置。
例如,有这样一段html
<body>
<header>这是header</header>
<div>
<div ng-view></div>
</div>
<footer>这是footer</footer>
</body>
在这个例子中,将所有需要渲染的内容都放到了<div>中,而<header>和<footer>中的内容在路由改变时不会发生变化。
ng-view是由ngRoute模块提供的一个特殊指令,它的独特作用是在HTML中给$route对应的视图内容占位。ng-view是一个优先级为1000的终极指令。angularjs不会运行同一个元素上的低优先级指令(例如<div ng-view></div>元素上其他指令都是没有意义的)
ngView指令遵循以下规则
1、每次触发$routeChangeSuccess事件,视图都会更新。
2、如果某个模版同当前的路由相关联:
创建一个新的作用域。
移除上一个视图,同时上一个作用域也会被清楚。
将新的作用域同当前摹本关联在一起。
如果路由中有相关的定义,那么就把对应的控制器同当前作用域关联起来。
触发$viewContentLoaded事件。
如果提供了onload属性,调用该属性所指定的函数。
路由
angularjs提供了when和otherwise两个方法来定义路由。用config函数在特定的模块或应用中定义路由。
现在,我们使用when方法添加一个特定的路由。
when方法:path,route
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" ng-app="app">
<head>
<title>路由</title>
<script src="JS/angular.min.js"></script>
<script src="JS/angular-route.min.js"></script>
<script>
var app = angular.module('app', ['ngRoute']);
app.config(['$routeProvider', function ($routeProvider) {
//这里指定路由
$routeProvider
.when('/', {
templateUrl: './views/Login.html',
controller: 'LoginController'
})
.when('/Login', {
templateUrl: './views/Login.html',
controller: 'LoginController'
})
}]);
//控制器
app.controller('LoginController', function ($scope) { });
</script>
<style>
ul {
list-style-type: none;
}
</style>
</head>
<body>
<header>这是header</header>
<div>
<div ng-view></div>
</div>
<footer>这是footer</footer>
</body>
</html>
Login视图Login.html
<div>
<ul>
<li>用户名:<input type="text" /></li>
<li>密 码:<input type="password" /></li>
<li><button>登录</button><button>取消</button></li>
</ul>
</div>
在浏览器中查看
当然访问这样的路由:http://localhost:18174/1_4_route.html#/Login也是可以的。
第一个参数:是路由路径,这个路径会与$location.path进行匹配,$location.path也就是当前的URL的路径。如果路径后面还有其他内容,或使用了双斜线也可以正常匹配。我们也可以在url中存储参数,参数需要以冒号开头(例如:name),获取url参数可以使用$routeParams获取。
第二个参数是配置对象,决定了当第一个参数中的路由能够匹配时具体做些什么。配置对象中可以进行设置的属性包括controller、template、templateUrl、resolve、redirectTo和reloadOnSearch。
总结
这里介绍了路由与视图的简单知识点,也是由于在项目中用到的,也只能用到那儿,从哪儿学习,然后自己弄个demo学习了。这里举了一个简单的例子,先上手。当然,在实际的项目中,在项目中添加Controller,views等文件夹,使项目结构更清晰一些。
参考
angularjs权威教程
[Angularjs]视图和路由(一)的更多相关文章
- [Angularjs]视图和路由(四)
写在前面 关于angularjs的路由的概念基本上这篇就要结束了,通过学习,以及在实际项目中的实践,还是比较容易上手的.自己也通过angularjs做了一个在app上的一个模块,效果还是可以的. 系列 ...
- [Angularjs]视图和路由(二)
写在前面 上篇文章主要介绍了视图和路由的基本概念,并在文章最后举了一个简单的使用案例.这篇文章将继续学习路由的配置,及相关参数的说明. 系列文章 [Angularjs]ng-select和ng-opt ...
- [Angularjs]视图和路由(三)
写在前面 上篇文章主要介绍了路由中when方法的第二个参数,常见的几个属性,以及作用.本篇文章,将介绍和路由相关的几个常见的服务. 系列文章 [Angularjs]ng-select和ng-optio ...
- AngularJS 视图和路由
在AngularJS之后引用angular-route 路由 ngRoute模块加载声明 AngularJS提供的when和otherwise两个方法来定义应用的路由 otherwise ...
- AngularJs多重视图和路由的使用
使用AngularJs来做多重视图和路由是在方便不过了,在开发过程中,都有许多的页面,而这些页面都有相同的部分,比如页面的头部和尾部通常都是一样的,变化的都是主体部分,还有就是一些后端管理的一些项目, ...
- AngularJS 的嵌套路由 UI-Router
AngularJS 的嵌套路由 UI-Router 本篇文章翻译自:https://scotch.io/tutorials/angular-routing-using-ui-router 演示网站请查 ...
- AngularJS ui-router (嵌套路由)
http://www.oschina.net/translate/angularjs-ui-router-nested-routes AngularJS ui-router (嵌套路由) 英文原文:A ...
- 关于AngularJs中的路由学习总结
AngularJs中的路由,应用比较广泛,主要是允许我们通过不同的url访问不同的内容,可实现多视图的单页web应用.下面看看具体怎么使用. 关于路由 通常我们的URL形式为http://jtjds ...
- [转]AngularJS ui-router (嵌套路由)
本文转自:http://www.oschina.net/translate/angularjs-ui-router-nested-routes http://www.codeproject.com/A ...
随机推荐
- C++中各种数据类型占据字节长度
准备校招笔试的时候经常遇到C++某个数据类型占据多少个字节的问题,查阅了下资料,总结如下: 首先罗列一下C++中的数据类型都有哪些: 1.整形:int.long 2.字符型:char.wchar_t ...
- GridControl控件绑定RepositoryItemImageComboBox 作为下拉框使用
如果,时间长时了,已前做过的东西,都记不得了,所以记录一下. 废话不多说. 1.拖出gridview控件,然后将字段绑定上去 2.将要做下拉框的控件加入RepositoryItemImageCombo ...
- Linux 改进捕捉信号机制(sigaction,sigqueue)
sigaction函数 sigaction函数的功能是用于改变进程接收到特定信号后的行为. int sigaction(int signum, const struct sigaction *act, ...
- php基础25:each()
<?php /* 返回当前元素的键名和键值,并将内部指针向前移动: */ $people = array("Bill", "Steve", "M ...
- C#进阶系列——WebApi身份认证解决方案:Basic基础认证 (转)
http://www.cnblogs.com/landeanfen/p/5287064.html 前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人 ...
- Linux基础入门(20135207 王国伊)
实验一 Linux系统简介 一.实验心得 首个实验是简单介绍了Linux系统的简介,了解Linux系统的历史和发展.使我受益匪浅 实验二 基本概念及操作 一.学习目标 1.实验楼环境介绍 2.常用 ...
- 信息安全系统设计基础第一次实验报告 20135201&&20135306&&20135307
信息安全系统设计基础实验 班级: 201353 姓名:张忻 张嘉琪 黄韧 学号:20135301 20135307 20135306 实验日期:2015.11.10 实验名称: S3C2410的lin ...
- AutoLayout 约束与frame、bounds的设置
介绍 关于AutoLayout的介绍可参考: 使用解读: https://segmentfault.com/a/1190000004386278 iOS 屏幕适配,autoResizing autoL ...
- 用nginx的反向代理机制解决前端跨域问题
什么是跨域以及产生原因 跨域是指a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制 ...
- java并发:中断一个正在运行的线程
要使任务和线程能安全可靠地停止,并不是一件很容易的事情,java没有提供任何机制来安全地终止线程,那么我们该怎么办呢? 下面我们先来了解一下java中的中断机制: java中断机制是一种协作机制,也就 ...