AngularJS中的路由使用及实现代码


Posted in Javascript onOctober 09, 2017

前  言

本章节将为大家介绍 AngularJS 路由。AngularJS 路由允许我们通过不同的 URL 访问不同的内容。通过 AngularJS 可以实现多视图的单页Web应用(single page web application,SPA)。

1.1 Angular JS路由基础知识讲解

在AngularJS中使用路由:

1. 导入路由文件:angular-route.js

2. 在主模块中注入"ngRoute"。

angular.module("app",["ngRoute"])

3. 将超链接改写为路由格式。  -->  "#/标记"

<a href="#/" rel="external nofollow" rel="external nofollow" >首页</a>  //首页直接使用 #/ 表示
<a href="#/page1" rel="external nofollow" rel="external nofollow" >page1</a> //其他页面"#/标记" 表示

4. 在页面的合适位置,添加ng-view,用于承载路由打开的页面:      

<div ng-view></div> 
//或者 <ng-view></ng-view>

该 div 内的 HTML 内容会根据路由的变化而变化。

5. 在config配置阶段,注入$routeProvider,进行路由配置:

.config(function($routeProvider){
  $routeProvider
  .when("/",{template:'<h1 style="color:red;">这是首页</h1>'})
  .when("/page1",{templateUrl:"page.html",controller:"ctrl1"})
  .when("/page2",{templateUrl:"page.html",controller:function($scope){
    $scope.text = "这是ctrl不知道是几控制器!!"
  }})
  .when("/page3",{templateUrl:"page.html"})
  .when("/page4",{})
  .otherwise({redirectTo:"/"})
})

AngularJS 模块的 config 函数用于配置路由规则。通过使用 configAPI,我们请求把$routeProvider注入到我们的配置函数并且使用$routeProvider.whenAPI来定义我们的路由规则。

$routeProvider 为我们提供了 when(path,object) & otherwise(object) 函数按顺序定义所有路由,函数包含两个参数:

  1. 第一个参数是 URL 或者 URL 正则规则。
  2. 第二个参数是路由配置对象。

1.2.1路由设置对象

AngularJS 路由也可以通过不同的模板来实现。

$routeProvider.when 函数的第一个参数是 URL 或者 URL 正则规则,第二个参数为路由配置对象。

路由配置对象语法规则如下:

$routeProvider.when(url,{
  template:string, //在ng-view中插入简单的html内容
  templateUrl:string, //在ng-view中插入html模版文件
  controller:string,function / array, //在当前模版上执行的controller函数
  controllerAs:string, //为controller指定别名
  redirectTo:string,function, //重定向的地址
  resolve:object<key,function> //指定当前controller所依赖的其他模块
});

1.2.2参数说明

 ① template: 自定义HTML模板,会直接将这段HTML记载到ng-view中;

.when("/page3",{templateUrl:"page.html"})

② templateUrl: 导入外部的HTML模板文件。 为了避免冲突,外部的HTML应该是一个代码片段,即只保留body以内的部分。

.when("/page1",{templateUrl:"page.html",controller:"ctrl1"})

③ controller: 在当前HTML模板上,执行的controller函数。会生出新的作用域$scope. 可以接受字符串(声明好的controller名字),也可以直接接受函数。

.when("/page1",{templateUrl:"page.html",controller:"ctrl1"})

注意: 使用ng-view打开的页面,controller中的作用域是属于当前页面作用域的子作用域!! 依然符合Angular中父子作用域"能读不能写"的要求!

所以: 如果需要在ng-view中修改当前作用域的变量,必须把这个变量声明为对象的属性!!

④ redirectTo:重定向。一般用于.otherwise()中,用于重定向回首页!

.otherwise({redirectTo:"/"})

2.1 自定指令 

AngularJS允许用户自定义指令!!

例如: <div ng-view></div> 或 <ng-view></ng-view>

1. 使用.directive()声明一个自定义指令;

2. 定义指令时,指令名必须使用驼峰命名法; 而调用指令时,用"-"链接

.directive("huangGe")  -->  <huang-ge><huang-ge>
.directive("huangge")  -->  <haungge><huangge>

3. 定义指令时,对象中使用的属性:

① template: 调用指令时,生成的模板
 ② restrict: 用于声明指令允许的调用方式:

E->允许标签名表明  A->允许属性调用   C->允许类名调用   M->允许注释调用

默认值为:EA

如果需要注释调用,必须再添加一个属性:replace:true,而且注释调用前必须添加"directive:" eg:<!-- directive: huang-ge-->

.directive("jiangHao",function(){
  return {
    restrict : "EACM",
    replace:true,
    template:"<h1>这是一个自定义指令</h1>",
    
  }
})

3.1 实例

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
      ul{
        overflow: hidden;
      }
      li{
        width: 100px;
        height: 40px;
        text-align: center;
        float: left;
        line-height: 40px;
        list-style: none;
        cursor: pointer;
      }
      li a{
        text-decoration: none;
        color: black;
      }
      li:hover{
        background-color: yellow;
      }
      #div1{
        width: 1000px;
        height: 500px;
        margin: 20px auto;
        border: 2px solid red;
      }
    </style>
  </head>
  
  <body ng-app="app" ng-controller="ctrl">
    
    <ul>
      <li><a href="#/" rel="external nofollow" rel="external nofollow" >首页</a></li>
      <li><a href="#/page1" rel="external nofollow" rel="external nofollow" >page1</a></li>
      <li><a href="#/page2" rel="external nofollow" >page2</a></li>
      <li><a href="#/page3" rel="external nofollow" >page3</a></li>
      <li><a href="#/page4" rel="external nofollow" >page4</a></li>
    </ul>
    <div id="div1" ng-view></div>
    <jiang-hao></jiang-hao>
    <div jiang-hao></div>
    
    <div class="jiang-hao"></div>          
  </body>
  
  <script src="js/angular.js" type="text/javascript"></script>
  <script src="js/angular-route.js" type="text/javascript"></script>
  <script type="text/javascript">
  
angular.module("app",["ngRoute"])
.config(function($routeProvider){
  $routeProvider
  .when("/",{template:'<h1 style="color:red;">这是首页</h1>'})
  .when("/page1",{templateUrl:"page.html",controller:"ctrl1"})
  .when("/page2",{templateUrl:"page.html",controller:function($scope){
    $scope.text = "这是ctrl不知道是几控制器!!"
  }})
  .when("/page3",{templateUrl:"page.html"})
  .when("/page4",{})
  .otherwise({redirectTo:"/"})
})
.controller("ctrl",function($scope){
  $scope.test = "这是一段测试文字!";
  $scope.obj = {
    test:"这是一个测试对象!"
  }
})
.controller("ctrl1",function($scope){
  $scope.text = "这是ctrl1控制器!";
})

 */
.directive("jiangHao",function(){
  return {
    restrict : "EACM",
    replace:true,
    template:"<h1>这是一个自定义指令</h1>",
    
  }
})
  </script>
  
</html>

效果图:

AngularJS中的路由使用及实现代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS中Iframe之间传值的方法
Mar 11 Javascript
JavaScript Serializer序列化时间处理示例
Jul 31 Javascript
BootStrap文件上传样式超好看【持续更新】
May 10 Javascript
JavaScript实现页面跳转的方式汇总
May 16 Javascript
全面解析bootstrap格子布局
May 22 Javascript
基于jQuery的select下拉框选择触发事件实例分析
Nov 18 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
Dec 13 Javascript
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
Jan 11 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
Jan 12 Javascript
React组件refs的使用详解
Feb 09 Javascript
详解AngularJS 过滤器的使用
Jun 02 Javascript
解决Vue.js由于延时显示了{{message}}引用界面的问题
Aug 25 Javascript
React如何利用相对于根目录进行引用组件详解
Oct 09 #Javascript
React Native中的RefreshContorl下拉刷新使用
Oct 09 #Javascript
JS实现的全排列组合算法示例
Oct 09 #Javascript
js + css实现标签内容切换功能(实例讲解)
Oct 09 #Javascript
jQuery ajax调用webservice注意事项
Oct 08 #jQuery
js用类封装pop弹窗组件
Oct 08 #Javascript
利用js编写网页进度条效果
Oct 08 #Javascript
You might like
php SQL之where语句生成器
2009/03/24 PHP
通过PHP CLI实现简单的数据库实时监控调度
2009/07/01 PHP
php实现自动获取生成文章主题关键词功能的深入分析
2013/06/03 PHP
php中有关合并某一字段键值相同的数组合并的改进
2015/03/10 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
使用PHP开发留言板功能
2019/11/19 PHP
jquery text()要注意啦
2009/10/30 Javascript
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
javascript获取元素CSS样式代码示例
2013/11/28 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
JS实现的表头列头固定页面功能示例
2017/01/10 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
2019/04/17 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
简单了解vue 插值表达式Mustache
2020/07/22 Javascript
浅析Python中的join()方法的使用
2015/05/19 Python
Python中functools模块的常用函数解析
2016/06/30 Python
python对excel文档去重及求和的实例
2018/04/18 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
python实现KNN分类算法
2019/10/16 Python
python列表生成器迭代器实例解析
2019/12/19 Python
Python openpyxl 插入折线图实例
2020/04/17 Python
Ivory Isle Designs美国/加拿大:婚礼和活动文具公司
2018/08/21 全球购物
卫校毕业生自我鉴定
2013/10/31 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
2014年教师党员自我评价范文
2014/09/22 职场文书
违章停车检讨书
2014/10/21 职场文书
开票证明
2015/06/23 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书
Hive HQL支持2种查询语句风格
2022/06/25 数据库