angularJS的路由!

angularJS 路由:(分发需求)

angularJS 中路由是单独提供的功能模块,ngRoute  也是一个单独发行的文件

可以通过 npm 去安装这个包:angular-route

<script type=‘text/javascript‘ src=‘bower_components/angular/angular.js‘></script>
<script type=‘text/javascript‘ src=‘bower_components/angular-route/angular-route.js‘></script>
<script type="text/javascript">
// 创建一个模块
var myApp = angular.module(‘myApp‘,[‘ngRoute‘]);
//配置路由
myApp.config([‘$routeProvider‘,function($routeProvider){

}]);
</script>

做路由的配置

配置路由的规则就是:什么样的请求,就找到什么样的控制器;

when就是"当"的意思,”当“这个的时候,请求这个控制器:

<script type=‘text/javascript‘ src=‘bower_components/angular/angular.js‘></script>
<script type=‘text/javascript‘ src=‘bower_components/angular-route/angular-route.js‘></script>
<body ng-app="myApp">
    <ul>
        <li><a href="#/a">a</a></li>
        <li><a href="#/b">b</a></li>
        <li><a href="#/c">c</a></li>
    </ul>
    <div ng-view></div>
</body>
<script type="text/javascript">
// 创建一个模块
var myApp = angular.module(‘myApp‘,[‘ngRoute‘]);
//配置路由
myApp.config([‘$routeProvider‘,function($routeProvider){
    $routeProvider
    .when(‘/students/:name?‘,{
        controller:‘AController‘,
        templateUrl:‘./view/a.html‘
    })
    .when(‘/a‘,{
        controller:‘AController‘,
        templateUrl:‘./view/a.html‘
    })
    .when(‘/b‘,{
        controller:‘BController‘,
        templateUrl:‘./view/b.html‘
    })
    .when(‘/c‘,{
        controller:‘CController‘,
        templateUrl:‘./view/c.html‘
    })
    .otherwise({
        //重定向,做跳转
        redirectTo:‘/c‘
    });
}]);
myApp.controller(‘AController‘,[‘$scope‘,‘$routeParams‘,function($scope,$routeParams){
    $scope.title = ‘你好‘+$routeParams+‘这里是A控制器‘;
}]);
myApp.controller(‘BController‘,[‘$scope‘,function($scope){
    $scope.title = ‘这里是B控制器‘;
}]);
myApp.controller(‘CController‘,[‘$scope‘,function($scope){
    $scope.title = ‘这里是C控制器‘;
}]);
</script>

在页面请求这个路由的时候,会发现多加载了一个View模板文件:

解决方法:使用 script 标签

另外的一种写视图的方法:(写到这个里面)

<script type="text/ng-template"></script>

注意:script标签,只有当 type=‘text/javascript‘ 才会被当作JavaScript脚本执行;

script 就算不能执行,也不能在页面上显示;所以很多时候,会把模板写到script 里面:

<script id="a_tmpl" type="text/ng-template">
    <h1>{{title}}</h1>
</script>

修改模板文件:

.when(‘/a‘,{
    controller:‘AController‘,
    templateUrl:‘a_tmpl‘
})

这里是:找是否存在一个 a_tmpl 的script , 如果有就把他作为模板去使用

还有这样的一种需求:例如这种需求:

http://127.0.0.1/angularjs/domo/22.ng-route01.html#/student/zhangsan

难道我们还要写很多的when吗

这个是麻烦也解决不了的,不可能为每一个学生,例如“张三”都去写一个控制器和模板:

所有的学生都应该:都应该放到一个控制器使用一个模板

#/a 这用的地址是属于特定的地址;

#/student/zhangsan 这种是属于特定一类的地址;

例如请求:

http://127.0.0.1/angularjs/domo/22.ng-route01.html#/students/zhangsan

我们可以使用 “ : name”去匹配任意的字符串:

//.when(‘/students/:name?‘,{
.when(‘/students/:name‘,{
    controller:‘AController‘,
    templateUrl:‘./view/a.html‘
})

这里的 “:”号是一个占位符,“?”说明这个位置可以省略:
例如:请求这个地址,也是跳转到a控制器,就是后面的?表示后面的可以省略
http://127.0.0.1/angularjs/domo/22.ng-route01.html#/students/

如何去拿这个传入的名字

方法:重新传入一个新的对象:

myApp.controller(‘AController‘,[‘$scope‘,‘$routeParams‘,function($scope,$routeParams){
    $scope.title = ‘你好‘+$routeParams+‘这里是A控制器‘;
}]);

$routeParams:是拿路由传递过来的参数;

例如

我们请求的是 /students/zhangsan 这个地址

拿/students/:name这个规则去匹配

它能提取出来一个 键值:{name:zhangsan}

复杂一点的:

例如请求的是 /students/zhangsan

用/:role/:name去匹配:

提取出来的键值:{role:students,name:zhangsan}

.when(‘/students/:name‘,{
    controller:‘AController‘,
    templateUrl:‘./view/a.html‘
})
myApp.controller(‘AController‘,[‘$scope‘,‘$routeParams‘,function($scope,$routeParams){
    $scope.title = ‘你好‘+$routeParams+‘这里是A控制器‘;
}]);

例如请求这个:

http://127.0.0.1/angularjs/domo/22.ng-route01.html#/student/zhangsan

看到的结果就是:你好zhangsan这里是A控制器

时间: 2024-08-24 09:51:04

angularJS的路由!的相关文章

AngularJs ui-router 路由的介绍

AngularJs ui-router 路由介绍 野兽之前有写过一篇关于Angular自带的路由:ngRoute.今天来说说Angular的第三方路由:ui-router.那么有人就会问:为什么Angular有了自带的路由,我们还需要用ui-router呢?这里简单明了的说明下ngRoute和ui-router的区别吧,其实也没很大的区别,主要的就是ngRoute针对于单视图,而ui-router可用于多视图(这里说的视图是指在页面内我们可控制的,可变化的区域).比如我们点击了一个link,我们

【实例分解二】angularjs根据路由按需加载Controller

开始笔记之前,把早上检测到的angularjs中的命名问题做一下记录. 检测工具:google浏览器扩展工具angularJS,结果如下: angularjs中,module要遵守lowerCamelCase原则,例:"myApp"; controller要遵守UpperCamelCase原则并且要以Controller结尾,例:"MainController". 这一篇笔记主要对angularjs根据路由按需加载Controller的操作进行了说明,也就是上一篇中

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"></

关于js单页面实现跳转原理以及利用angularjs框架路由实现单页面跳转

还记得我们刚开始学习html时使用的锚节点实现跳转吗? <a href="#target">我想跳转至目标位置</a> <p>第一条</p> .... <p id="#target">我是目标位置</p> ... 在js中实现跳转也是利用了这一点,下面直接在代码中解释吧: 1 <body> 2 <ul> 3 <li><a href="#/mus

关于angularjs中路由页面强制更新的问题

有这么一个问题,在页面内路由页面跳转时,第一次跳入路由页面时是正常的,但是第二次会记住第一次时的状态,有时候并不想这样,想强制更新这个路由页面. 有一种方式就是使用 ui-sref-opts功能,我试了,结果不好使,不知道是哪里出的问题: <a class="item" ui-sref="page1({id:1})" ui-sref-opts="{reload:true, notify: true}"> 链接1</a> 在

AngularJS笔记---路由视图

最近有同事提到过关于ng-view的使用, 其实自己也不懂了,由于最近一直在做AngularJs的Rearch,所以就看了一些关于ng-view的国外博客. 做过ASP.NET MVC4的都知道, 我们会有一个对应的controller和views,还有一个routerconfig. 其实在AngularJS也有类似的东西.下面我会按照Asp.net的MVC框架搭建一个AngularJs的小Demo出来. 一.创建文件目录: A. Controller文件夹放ng-controller的代码 B

AngularJS“多重路由”嵌套模块——AngularJS“路由”嵌套学习资料教程

这是小编的一些学习资料,理论上只是为了自己以后学习需要的,但是还是需要认真对待的 以下内容仅供参考,请慎重使用学习 1.AngularJS路由嵌套 Angularjs本身自带路由模块,可以满足通过不同的 URL 访问不同的内容,当然实际应用为在单页面点击不同按钮等加载不同页面 之前有关于angular-route路由的介绍,但是只能一层路由嵌套,如果需要多重嵌套就是不够用了 UI-Router作为AngularUI为开发者提供的其中实用的一个模块,根据URL状态组织和控制界面UI的渲染,不是仅仅

AngularJs配置路由延迟加载文件

AngularJs需要按需求加载文件,需要对route进行重定义 var App= angular.module('AppConfigService', ['ui.router', 'oc.lazyLoad']); App.provider('appConfig', ['$stateProvider', '$urlRouterProvider', '$ocLazyLoadProvider', function ($stateProvider, $urlRouterProvider, $ocLaz

angularjs ui-router 路由简介

ui-router 是angular的第3方路由.他与ngrouter 没有太大区别. ui-router 可以深度嵌套 ngrouter 简单的嵌套,针对于单个视图(视图就是需要嵌套的页面) 例如:我们点击了一个链接,我们需要在视图中跳转到指定的一个页面,那么ngRoute已经满足了我们的需求,而当我们点击的时候,需要在分别在不同的地方跳转两个不同的页面的时候,ngRoute就不够用了,我们就需要用到ui-router $urlRouterProvider $urlRouterProvider