做单页面应用多是通过不同的url来识别出不同的页面展现的。

angularjs 为我们提供一个封装好的ngRoute工具

简单介绍用法 :

<div ng-view></div>

界面上放入一个 ng-view指令,待会儿界面会刷新这个区域,它也支持动画,可以通过添加css在切换视图时做一些动画。

我们一段一段来看

                var app = angular.module("Main", ['ngRoute']);
app.config(function ($locationProvider) {
$locationProvider.html5Mode(true); //最少要 ie10 才可以使用 html5mode 哦
//$locationProvider.html5Mode(false).hashPrefix("!");
});

记得要依赖 ngRoute 模块

我们通过 config 来设置 $location to html5Mode , default 是 hashbang

             app.config(function ($routeProvider) {
$routeProvider.
when("/", {
template: '<div>product</div>',
controller: function () {
console.log("in product");
}
}).
when("/:category", {
templateUrl: function(routeParams){ //这里不是依赖注入哦
                   return '/' +
routeParams
                  },
controller: function ($routeParams) {
console.log("here");
console.log($routeParams);
}
}).
when("/:category/:code", {
template: '<div>category and code</div>',
controller: function ($routeParams) {
console.log($routeParams);
console.log("in product code size");
}
}).
otherwise({
redirectTo: '/'
});
});

通过 $routeProvider.when 和 otherwise 我们就可以设置我们的视图 template , controller 对应到哪个URL了

每当URL装换的时候,angular会帮我们匹配 (基本原理就是用了html history api)

这里URl的格式是正对文件folder路径的 ":" 符合代表它是个参数,我们只好通过 $routeParams可以一块捕获

我举个例子 :

我们访问这里  xx.com/folder1/index.aspx (文件正正的路径)

经过 redirectTo '/' 就变成了 xx.com 也就匹配了 when('/')设置

那我们访问 xx.com/category1?key=value

会对应到  "/:category" 的设置 , 它是通过folder的数量来做配对的 (params 将会是  category='category1' key=value)

那我们在访问 xx.com/man/mk100?key=value&key2=value2

会对应到 '/:category/:code'的设置 (params 是 category='man' code='mk100' key=value key2=value2)

angularjs 会依据模板和controller 绘画好视图后覆盖到ng-view中.

对应不支持htmlMode的朋友,可以使用hashbang mode , 其实差不了多少,只是难看一些罢了,还有后台比较难对 #! 做处理

这里举出这2个mode的区别

config 设置换成这样

   $locationProvider.html5Mode(false).hashPrefix('!');

我们访问这里  xx.com/folder1/index.aspx (文件正正的路径)

经过 redirectTo '/' 就变成了 xx.com/forlder1/index.aspx#!/ 也就匹配了 when('/')设置

(它没有像html5那样把整个路径改了,而只是添加了hash在后面)

那我们访问 xx.com/forlder1/index.aspx#!/category1?key=value 会对应到  "/:category" 的设置

通过hash 访问,href="#!/.." 不能覆盖URL,只能在#hash之后添加东西。

其它的和html5其实是一样的。

小总结 : html5 会覆盖原路径,hash只是添加#! , html5 访问路径就像普通URL , hash 就是普通URL 加 #!

#! 在后台会被翻译成 ?key=value 的格式,这是协议,方便SEO蜘蛛。

ngRoute 路由的更多相关文章

  1. AngularJs ng-route路由详解

    本篇基于ng-route来讲下路由的使用...其实主要是 $routeProvider 搭配 ng-view 实现. ng-view的实现原理,基本就是根据路由的切换,动态编译html模板. 更多内容 ...

  2. angular.js之路由的选择

    在一个单页面中,我们可以添加多个模块,使得网页只在需要的时候加载这个模块.模块的切换大致上可以代替网页的切换,于是,我们便可以通过模块的切换实现网页的切换,这个切换是按需加载的. 乍一看非常普通的东西 ...

  3. Angular路由(三)

    AngularJs ng-route路由详解 其实主要是$routeProvider搭配ng-view实现. ng-view的实现原理,基本就是根据路由的切换,动态编译html模板. 前提 首先必须在 ...

  4. 从零开始搭建口袋妖怪管理系统(2)-借助ngRoute实现详情页面跳转

    一.目标 上一次我们用Angular1.x完成了简单的口袋妖怪展示列表页面,现在我们想要了解口袋妖怪更多的信息,但是发现原有单行表格可能容纳不下口袋妖怪的所有信息,所以现在我们需要一个口袋妖怪详情界面 ...

  5. ngRoute (angular-route.js) 和 ui-router (angular-ui-router.js) 模块有什么不同呢?

    ngRoute (angular-route.js) 和 ui-router (angular-ui-router.js) 模块有什么不同呢? 很多文章中都有说道:当时ngRoute在路由配置时用$r ...

  6. angularjs路由监听,uirouter感知路由变化,解决uirouter路由监听不生效的问题

     壹 ❀ 引 angularjs除了惊为天人的双向数据绑定外,路由也是出彩的一笔,通过路由配置,我们能在不发起页面跳转的情况下,对当前页内容进行整体更新,angularjs提供了ngRoute模块用于 ...

  7. AngularJS实例实战

    学习了这么多天的AngularJS,今天想从实战的角度和大家分享一个简单的Demo--用户查询系统,以巩固之前所学知识.功能需求需要满足两点 1.查询所有用户信息,并在前端展示 2.根据id查询用户信 ...

  8. AngularJS之中级Route【二】(七)

    前言 上一篇我们介绍了AngularJS内置的路由ngRoute,我们知道AngularJS被广泛应用于单页应用SPA(Single Page Application)中,此时路由对于我们来讲非常重要 ...

  9. angularJS获取json数据(实战)

    学习了这么多天的AngularJS,今天想从实战的角度和大家分享一个简单的Demo--用户查询系统,以巩固之前所学知识.功能需求需要满足两点 1.查询所有用户信息,并在前端展示 2.根据id查询用户信 ...

随机推荐

  1. CSAPP:cachelab(1)

    本项目大体上就是要求用C\C++来模拟cpu对cache的访问,然后统计hits.misses和eviction的次数.其实并没有想象中的那么难,感觉完全可以当成一道acm里面的大模拟题..下面就对这 ...

  2. SVN和Maven及Jenkins(转)

    目前项目组在开发一个项目,由多个子模块构成,构建工具是maven,版本控制工具是svn.本文想对如何结合使用maven和svn提出一点初步的想法 一.只有svn的情况 首先考虑没有maven的情况.这 ...

  3. python_Opencv_绘图

    opencv中也可以用一些函数来绘图 直接上源码,例子: # -*- coding: utf-8 -*- import numpy as np import cv2 # 黑色的图片 img=np.ze ...

  4. Project Euler problem 61

    题意很明了. 然后我大概的做法就是暴搜了 先把每个几边形数中四位数的处理出来. 然后我就DFS回溯着找就行了. 比较简单吧. #include <cstdio> #include < ...

  5. STL之Pairs

    什么是Pair 关于类Pair的介绍,下面是引自<C++ Standard Library>的一段话: The class pair is provided to treat two va ...

  6. Java基础知识强化78:正则表达式之获取功能(案例)

    1. 获取下面这个字符串中由三个字符组成的单词. da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu? 2. ...

  7. Android - 硬件抽象层(HAL)

    以下资料摘录整理自老罗的Android之旅博客,是对老罗的博客关于Android底层原理的一个抽象的知识概括总结(如有错误欢迎指出)(侵删):http://blog.csdn.net/luosheng ...

  8. Apache和Nginx平滑重启

    之前修改了服务器配置都是简单粗暴的用restart重启apache/nginx,据说这样不好.需要平滑重启服务器,避免重启时打断用户行为.然后就根据官方文档了解了一下平滑重启的命令.本文根据Apach ...

  9. JSON 格式化为易读格式的字符串

    算法 http://blog.csdn.net/yanghaitaohhh/article/details/39672783 使用算法如下: 对输入字符串,逐个字符的遍历 1.获取当前字符. 2.如果 ...

  10. ASP.NET-FineUI开发实践-5

    1.tree的右键事件和单击事件 页面就不写了,准备一个树和一个菜单控件,随便写点啥 JS:注意注释 var menuSettings = F('menuSettings'); var tree = ...