AngularJS(九):路由

本文也同步发表在我的公众号“我的天空

 

 

 

AngularJS路由

 

AngularJS路由可以让我们通过不同的URL访问不同页面(似乎是废话),其价值主要体现在单页面的web应用中(single page web application,SPA),在移动端的web开发中,几乎都是SPA的形式。我们先通过一个简单的示例来了解AngularJS路由,随后再做进一步的学习。请看示例:

 

<html>
 <head>
  <title>AngularJS_23</title>
  <script src="Angular.js"></script>
  <script src="angular-route.min.js"></script>
 </head>
 <body ng-app="myApp">
     <ul>
         <li><a href="#/">首页</a></li>
         <li><a href="#/news">新闻</a></li>
         <li><a href="#/sport">体育</a></li>
     </ul>
     <div ng-view></div>
 </body>
 <script>
    var app=angular.module("myApp",['ngRoute']);
    app.config(function($routeProvider){
        $routeProvider
        .when('/',{template:'这是首页'})
        .when('/news',{template:'这是新闻页面'})
        .when('/sport',{template:'这是体育页面'})
        .otherwise({redirectTo:'/'});
    });

 </script>
</html>

示例代码AngularJS_23.html


运行该页面,当点击不同的链接时在DIV中显示不同的内容。分析以上代码,看看我们新增加了哪些部分:

 

首先,AngularJS路由功能的实现是在anguler-route中实现的,所以我们引入了angular-route.min.js。其次我们观察a标签里的href地址格式,其均是由#开头的,AngularJS中URL的形式是通过“# 标记”来实现的。随后在显示内容的DIV中,我们使用了ng-view指令,该DIV可以看成一个容纳页面的容器。另外在控制器代码中由于要引入外部模块,所以我们在模块app的声明中引入了“ngRoute”

 

接下来便是实现路由的关键代码app.config(),AngularJS通过config函数来配置路由,我们将$routeProvider引入到配置函数config(),并通过$routeProvider的when()或otherwise()函数来定义我们的路由规则,函数包含两个参数,第一个是URL或URL正则,第二个为路由配置对象,由于本例中只是简单的显示些文字,因此直接设置template就可以了。otherwise()函数定义所有未在when()中配置路由的其他url的路由规则,本例中直接设置redirctTo参数。

 

接下里我们学习路由配置对象,由于上一例中我们只是简单的演示路由,因此路由配置对象设置的比较简单,完整的路由配置对象格式为:

 

$routeProvider.when(url, {
    template: string,
    templateUrl: string,
    controller: string, function 或 array,
    controllerAs: string,
    redirectTo: string, function,
    resolve: object<key, function>
});

 

各参数说明:
template:如果我们只需要在ng-view中显示简单的html内容,就使用该参数,如上一例所示。
templateUrl:如果需要在ng-view中显示页面,则该参数为页面的url。
controller:在当前模板上执行的controller函数。
controllerAs:controller函数的别名。
redirectTo:重定向的地址,如上一列中的otherwise()函数所示。
resolve:指定当前controller所依赖的其他模块。

 

接下里我们演示一个更复杂的示例,我们先准备两个子页面:

 

<h1>这是新闻页面</h1>
<ul><li ng-repeat="new in news">{{new}}</li></ul>

示例代码route_news.html

 

<h1>这是体育页面</h1>
<ul><li ng-repeat="sport in sports">{{sport}}</li></ul>

示例代码route_sport.html

 

由于子页面是嵌套在主页面的ng-view中,所以只需要DOM元素就可以了,这两个页面都很简单,使用ng-repeat来展示相应数组的内容,这个是我们之前已经掌握的知识点了。

 

接下来是主页面:

 

<body ng-app="myApp">
     <ul>
         <li><a href="#/">首页</a></li>
         <li><a href="#/news">新闻</a></li>
         <li><a href="#/sport">体育</a></li>
     </ul>
     <div ng-view></div>
 </body>
 <script>
    var app=angular.module("myApp",['ngRoute']);
    app.controller("ctr_news",function($scope){
        $scope.news=['新闻一','新闻二'];
    })
    .controller("ctr_sport",function($scope){
        $scope.sports=['体育内容一','体育内容二'];
    })
    .config(function($routeProvider){
        $routeProvider
        .when('/',{
            template:'这是首页'
        })
        .when('/news',{
            templateUrl:'route_news.html',
            controller:'ctr_news'
        })
        .when('/sport',{
            templateUrl:'route_sport.html',
            controller:'ctr_sport'
        })
        .otherwise({redirectTo:'/'});
    });
 </script>

示例代码AngularJS_24.html

 

主页面的html部分与之前的示例完全一样,我们主要看控制器代码中。首先在config()函数中,我们在“新闻页面”与“体育页面”的路由配置中,使用了templateUrl来加载子页面,同时用controller来设置了其相应的控制器,新闻页面的控制器名为“ctr_news”,这样我们就可以在主页面中通过控制器“ctr_news”来访问并设置新闻页面的DOM了,在这里我们是初始化了一个数组“news”,这样在子页面中就可以使用该数组,并渲染新闻页面里的li元素,同时体育页面的处理也完全一样。

 

app.controller("ctr_news",function($scope){
        $scope.news=['新闻一','新闻二'];
    })

 

当然,我们也可以不对子页面设置单独的控制器,而是统一由主页面的控制器处理,不过这样不利于整体代码的架构,不建议这样写。

 

<body ng-app="myApp" ng-controller="ctr">
     <ul>
         <li><a href="#/">首页</a></li>
         <li><a href="#/news">新闻</a></li>
         <li><a href="#/sport">体育</a></li>
     </ul>
     <div ng-view></div>
 </body>
 <script>
    var app=angular.module("myApp",['ngRoute']);
    app.controller("ctr",function($scope){
       //所有的数据在主页面的控制器中来处理
        $scope.news=['新闻一','新闻二'];
        $scope.sports=['体育内容一','体育内容二'];
    })
    .config(function($routeProvider){
        $routeProvider
        .when('/',{
            template:'这是首页'
        })
        .when('/news',{
            templateUrl:'route_news.html'
        })
        .when('/sport',{
            templateUrl:'route_sport.html'
        })
        .otherwise({redirectTo:'/'});
    });
 </script>

示例代码AngularJS_25.html

 

该系列的示例代码

 

https://github.com/panyongwow/angularJS

 


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(转)Oracle中实现行列转换的方法

(转自)http://blog.csdn.net/Torrice/archive/2006/01/25/587986.aspx 我们在写SQL语句的时候经常需要用到行与列的转换问题&#xff0c;对于一个新手来说可能比较困难&#xff0c;其实你只要能够熟练运用Decode和Sum函数&#xff0c;这个问题就迎刃而解. Create table tes…

[C3W2] Structuring Machine Learning Projects - ML Strategy 2

第二周&#xff1a;机器学习策略&#xff08;2&#xff09;&#xff08;ML Strategy&#xff08;2&#xff09;&#xff09; 误差分析&#xff08;Carrying out error analysis&#xff09; 你好&#xff0c;欢迎回来&#xff0c;如果你希望让学习算法能够胜任人类能做的任务&a…

mysql语句执行顺序图示

转载于:https://www.cnblogs.com/whalesea/p/10382227.html

玩Java 8 – Lambda和并发

因此Java 8不久前发布&#xff0c;具有许多功能和更改。 我们所有的Java狂热者一直在等待这个历史&#xff0c;从他们最初宣布Java 7的所有强大功能开始一直到最终被取消。 我最近才有时间实际开始给它一个真实的外观&#xff0c;我将我的家庭项目更新到了8个&#xff0c;我不…

用matlab 拟合实数解,求大神指点matlab用拟合的方式解延迟微分方程组参数

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼dy(1)-k*y(1)*y(2);dy(2)Z(3,1)-a*y(2)-q*y(2);dy(3)k*y(1)*y(2)-Z(3,1);dy(4)a*y(2);dy(5)q*y(2);t12345678910111213141516171819202122232425262728293031323334353637383940y208563475657545454535252515150504948484747464545…

AngularJS(三):重复HTML元素、数据绑定

本文也同步发表在我的公众号“我的天空” 重复HTML元素 在前端的页面编写中&#xff0c;我们会经常遇到重复HTML元素&#xff0c;譬如绘制表格、菜单等&#xff0c;如以下代码显示一个简单的li列表&#xff1a; <body> <ul id"ul_cities"> </ul…

hyper-v下的ubuntu虚拟机分辨率修改

修改/etc/default/grub sudo vim /etc/default/grub 改变前: GRUB_CMDLINE_LINUX_DEFAULT"quiet splash" 改变后: GRUB_CMDLINE_LINUX_DEFAULT"quiet splash videohyperv_fb:1920x1080" 更新grub配置 sudo update-grub 重启即可生效 sudo reboot 转载于:ht…

gopacket 在 windows 上面遇到的问题

前阵子有个需求是使用 golang 抓包改包&#xff0c;我用到了 gopacket 这个包&#xff0c;但是出了一些小问题。 我按照网上的方法进行使用 OpenLive 抓包&#xff0c;发现并不行&#xff0c;报错 error open adapter 啥啥啥。 经过调试发现根本找不到这个网卡&#xff0c;需要…

使用表中的数组数据类型

在这篇文章中&#xff0c;我想跟进我以前关于Oracle集合数据类型的文章 &#xff0c;并且我将集中精力使用af&#xff1a;table组件中的oracle.jbo.domain.Array属性。 因此&#xff0c;在我的数据库中&#xff0c;我具有以下SQL类型&#xff1a; create or replace type var…

最伟大最不可思议最令人感动的父亲

转载于:https://www.cnblogs.com/chenou/archive/2007/10/23/935014.html

关于数据库名、实例名

最近因看到论坛有人问起这方面的东西&#xff0c;将自己的理解加上查阅相关资料整理如下&#xff0c;如果不全或不当的地方&#xff0c;望指正并补全它。 数据库名(DB_NAME)、实例名(Instance_name)、以及操作系统环境变量(ORACLE_SID) 在ORACLE7、8数据库中只有数据库名(db_…

linux 文件inode,linux文件系统-inode学习整理

linux文件系统-inode学习整理介绍linux文件系统可讲的模块有很多&#xff0c;包括文件系统整体架构、文件系统分类、虚拟文件系统以及文件系统存储结构等等&#xff0c;本文主要介绍的是文件系统的存储结构&#xff0c;也就是本文的重点-inode。文件存储结构首先从开天辟地开始…

操作方法:Maven的Spring Boot和Thymeleaf

Spring Boot是一款很棒的软件&#xff0c;可让您在几秒钟内引导Spring应用程序。 它确实有效。 尽可能少的配置即可上手。 而且仍然可以更改默认值。 让我们看看用Thymeleaf和Maven引导Spring MVC并在IntelliJ中使用它是多么容易。 Spring MVC Thymeleaf与Maven的基本设置 确…

csharp: 百度语音合成

public string API_id "3333"; //你的IDpublic string API_record null; public string API_record_format null; public string API_record_HZ null;public string API_key "geovindu"; //你的KEYpublic string API_secret_key "geovindu"…

20080408 - VS2003 中 Jscript 文件中文乱码问题

在 VS2003 中新建 Jscript 文件中使用中文时&#xff0c;如果和网页的编码不一致&#xff0c;有可能会出现中文乱码问题。 而 VS2003 的Web页面默认是用 UTF-8&#xff0c;这是多语的首选方案。 但 VS2003 产品的本地化工作可能做得不到位&#xff0c;在其中新建的 Jscript 文件…

一个简单的发布工具

自己写的一个简单工具&#xff0c;可以把做好的程序中的.cs,.sln,等代码文件排除掉&#xff0c;只剩下页面文件 是用.net 2.0做的程序文件 转载于:https://www.cnblogs.com/itants/archive/2007/10/24/935824.html

用于大型事件处理的Akka Java

我们正在设计一个大型的分布式事件驱动系统&#xff0c;用于跨事务数据库的实时数据复制。 来自源系统的数据&#xff08;消息&#xff09;在到达目的地之前经历了一系列转换和路由逻辑。 这些转换是多进程和多线程的操作&#xff0c;包括可以同时执行的较小的无状态步骤和任务…

pygame-KidsCanCode系列jumpy-part8-记录历史最高分

通常在多玩家的游戏中&#xff0c;每个玩家都会有自己的得分&#xff0c;最高分数会成为该游戏的最佳记录。这一篇&#xff0c;学习下如何记录最高得分&#xff1a;&#xff08;为了简化代码&#xff0c;本文采用文件方式&#xff0c;仅记录本机得分&#xff0c;明白原理后&…

linux下查看进度命令,在Linux系统中使用Coreutils Viewer显示命令运行进度

Coreutils Viewer(cv)是一个简单的程序&#xff0c;它可以用于显示任何核心组件命令(如&#xff1a;cp、mv、dd、tar、gzip、gunzip、cat、grep、fgrep、egrep、cut、sort、xz、exiting)的进度。它使用文件描述信息来确定一个命令的进度&#xff0c;比如cp命令。cv之美在于&…

每个Java开发人员都应该阅读的10本书

我已经阅读了自己的软件开发书籍&#xff0c;并且发现发现一本我想多次阅读的书籍非常罕见。 但是&#xff0c;有时我会发现一本书&#xff0c;每次阅读时都会教给我新的东西。 这篇博客文章是对这些稀有宝石的致敬。 现在&#xff0c;我毫不犹豫地向您介绍十本书&#xff0c…