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 相关文章推荐
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
Jun 04 Javascript
解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
Jan 11 Javascript
jquery mobile实现拨打电话功能的几种方法
Aug 05 Javascript
javascript学习笔记(六)数据类型和JSON格式
Oct 08 Javascript
谷歌浏览器调试JavaScript小技巧
Dec 29 Javascript
JS实现文件动态顺序载入的方法
Mar 07 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
Feb 16 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
Oct 07 Javascript
JS正则替换去空格的方法
Mar 24 Javascript
CryptoJS中AES实现前后端通用加解密技术
Dec 18 Javascript
vue结合el-upload实现腾讯云视频上传功能
Jul 01 Javascript
jQuery实现异步上传一个或多个文件
Aug 17 jQuery
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数组函数知识汇总
2016/05/12 PHP
PHP调试及性能分析工具Xdebug详解
2017/02/09 PHP
php依赖注入知识点详解
2019/09/23 PHP
TNC vs IO BO3 第二场2.13
2021/03/10 DOTA
JS 创建对象(常见的几种方法)
2008/11/03 Javascript
Ext.MessageBox工具类简介
2009/12/10 Javascript
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
javascript正则表达式总结
2016/02/29 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
2016/12/19 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
python中字典(Dictionary)用法实例详解
2015/05/30 Python
python中学习K-Means和图片压缩
2017/11/20 Python
Python操作SQLite数据库过程解析
2019/09/02 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
python操作gitlab API过程解析
2019/12/27 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
python怎么删除缓存文件
2020/07/19 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
JAVA和C++的区别
2013/10/06 面试题
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
幼儿园家长安全责任书
2014/07/22 职场文书
淘宝文案策划岗位职责
2015/04/14 职场文书
行为规范主题班会
2015/08/13 职场文书
申论不会写怎么办?教您掌握这6点思维和原则
2019/07/17 职场文书
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis