理解AngularJS ngRoute

一般来说,我们认为AngularJS是一套前端的MVC框架。那么,为了实现视图的中转,肯定会涉及到路由的概念。这里我们就来说说有关AngularJS的路由——ngRoute。

个人了解到AngularJS,是由于在寻找可以动态利用Ajax从服务器端取得部分页面这一功能而找到EmberJS,而后又根据EmberJS找到的AngularJS。而在AngularJS中,实现这一功能的,就是ngRoute。

所以,个人与AngularJS的结缘,是由于ngRoute一点也不为过。

理解

AngularJS的基础是其模块机制。在模块的基础上,我们可以利用JavaScript的一些特性来做我们想做的任何的事情。

ngRoute是一个AngularJS的模块。其不是在AngularJS的核心库当中。

在使用ngRoute的时候,实际上,我们是在应用的主模块中引入ngRoute模块并添加$routeProvider服务到主模块的config方法中来达到我们的目标。这与其他一些库的使用方式是类似的,如ng-grid。

在ngRoute中,主要有$route、$routeProvider、$routeParams三个服务项目。

$routeProvider用于在主应用主模块的配置方法中。$route与$routeParams一般常见于控制器中。

安装

  1. 使用Google CDN
1
http://ajax.googleapis.com/ajax/libs/angularjs/X.Y.Z/angular-route.js
  1. 使用Bower

由于国内网络环境的和谐,个人强烈建议使用此种方式!

1
bower install [email protected]
  1. 使用官方CDN
1
http://code.angularjs.org/X.Y.Z/angular-route.js

使用

ngRoute并没有在AngularJS的核心包里面,所以在使用的时候,需要引入一个独立的库。

  1. 在HTML中引入ngRoute
1
2
3
4
<!-- index.html --><script src="angular.js" /><script src="angular-route.js" />
  1. 在应用主模块中,引入ngRoute
1
2
3
 myApp = angular.module(, []);
  1. 在模块的config中绑定URL路径与控制器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 configFn = 
    $routeProvider.
      when(, {
        templateUrl: ,
        controller: 
      }).
      when(, {
        templateUrl: ,
        controller: 
      }).
      otherwise({
        redirectTo: 
      });
};

myApp.config(configFn);

$routeProvider

$routeProvider是一个用于配置路由内置服务。由于它是一个服务,根据service的使用建议,我们主要将其当做为工具来使用,所以我们一般直接使用$routeProvider.XXX来调用它的成员方法来实现一定的功能,而不是实例化一个$routeProvider的实例。它主要有以下两个成员函数:

  1. otherwise(params):设定映射信息到$route.current,一般用于指定没有标明的路由如何处理。
  2. when(path, route):向$route服务添加新的路由。path是指定的URL路径,route标明路由的处理。

$routeProvider.when(path, route)中的路由处理参数对象,常用的有如下的属性:

  • controller:用于指向用于路由处理的控制器。
  • template:用于指向用于路由的视图模板。
  • redirectTo:重定向。(使用$location)

不常用属性:

  • controllerAs:控制器别名,一旦设定,在视图中的scope就得使用这个别名来调用控制器。
  • templateUrl
  • resolve

$route

$route用于将控制器与视图相连。它观察$location.url(),并且尝试映射路径到一个已经存在的路由定义中。它依赖$location、$routeParams。它主要有如下成员函数:

  • reload() 用于重新加载当前的路由,哪怕$location没有改变。调用后,ngView将创建新的Scope等。

它主要有如下事件:

  • $routeChangeStart:路由改变之前触发;
  • $routeChangeSuccess:路由改变之后触发;
  • $routeChangeError:路由改变出错触发;

$routeParams

$routeParams允许你检索当前路由的参数。主要使用$locationsearch()path()方法。

参考

时间: 2024-09-29 02:04:22

理解AngularJS ngRoute的相关文章

转: 理解AngularJS中的依赖注入

理解AngularJS中的依赖注入 AngularJS中的依赖注入非常的有用,它同时也是我们能够轻松对组件进行测试的关键所在.在本文中我们将会解释AngularJS依赖注入系统是如何运行的. Provider服务($provide) $provide服务负责告诉Angular如何创造一个新的可注入的东西:即服务(service).服务会被叫做provider的东西来定 义,你可以使用$provide来创建一个provider.你需要使用$provide中的provider方法来定义一个provi

AngularJs ng-route路由详解

本篇基于ng-route来讲下路由的使用...其实主要是 $routeProvider 搭配 ng-view 实现. ng-view的实现原理,基本就是根据路由的切换,动态编译html模板. 更多内容参考:Angularjs总结 前提 首先需要在页面引入angular和angular-route,注意要在angular-route之前引入angular <script src="../../bower_components/angular/angular.js"></

angularjs ngRoute的使用简单例子

很丑的小例子,刚学angularjs,写下来方面以后看. 1.例子的工程目录如下: 2.index.html代码如下: <!DOCTYPE html><html><head>    <meta charset="utf-8" />    <script type="text/javascript" src="lib/angular.js"></script>    <s

理解AngularJS中的Service类型

Angular中有几种不同类型的services.每一种都有自己的独特用法. 需要记住的非常重要的一点是service总是一个单体,无论是哪种类型的service. 注释:单体是一种设计模式,它限制了每一个类仅能够实例化为一个对象.无论我们在什么地方注入我们的service,将永远使用同一个实例. Constant 例子: app.constant('fooConfig',{ config1: true, config2: "Default config2" }); Constant是

通俗理解angularjs中的$apply,$digest,$watch

<!DOCTYPE html> <html lang="zh-CN" ng-app="app"> <head> <meta charset="utf-8"> <title>angular时钟辅助理解$apply,$digest,$watch</title> <link rel="stylesheet" href="../bootstrap.

深入理解 AngularJS 的 Scope

JavaScript 的原型继承就是奇葩. 之前在 V2EX 上看到讨论说,不会 OOP 的 JavaScript 的程序员就是野生程序员.看来我是属于野生的. 一.遇到的问题 问题发生在使用 AngularJS 嵌套 Controller 的时候.因为每个 Controller 都有它对应的 Scope(相当于作用域.控制范围),所以 Controller 的嵌套,也就意味着 Scope 的嵌套.这个时候如果两个 Scope 内都有同名的 Model 会发生什么呢?从子 Scope 怎样更新父

深入理解 AngularJS 的 Scope(转)

一.遇到的问题 问题发生在使用 AngularJS 嵌套 Controller 的时候.因为每个 Controller 都有它对应的 Scope(相当于作用域.控制范围),所以 Controller 的嵌套,也就意味着 Scope 的嵌套.这个时候如果两个 Scope 内都有同名的 Model 会发生什么呢?从子 Scope 怎样更新父 Scope 里的 Model 呢? 这个问题很典型,比方说当前页面是一个产品列表,那么就需要定义一个 ProductListController functio

深入浅出理解AngularJS模块

AngularJS 模块 1.添加控制器 你可以使用 ng-controller 指令来添加应用的控制器: <div ng-app="myApp" ng-controller="myCtrl"> 名: <input type="text" ng-model="firstName"><br>姓: <input type="text" ng-model="la

深入理解AngularJS中的ng-bind-html指令和$sce服务

angular js的强大之处之一就是他的数据双向绑定这一牛B功能,我们会常常用到的两个东西就是ng-bind和针对form的ng-model.但在我们的项目当中会遇到这样的情况,后台返回的数据中带有各种各样的html标签.如: $scope.currentWork.description = "hello,<br><b>今天我们去哪里?</b>" 我们用ng-bind-html这样的指令来绑定,结果却不是我们想要的.是这样的 hello, 今天我们