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 相关文章推荐
javascript 常用功能总结
Mar 18 Javascript
手写的一个兼容各种浏览器的javascript getStyle函数(获取元素的样式)
Jun 06 Javascript
js自定义鼠标右键的实现原理及源码
Jun 23 Javascript
JQuery中Ajax()的data参数类型实例分析
Dec 15 Javascript
微信小程序左右滑动的实现代码
Dec 15 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
Apr 18 Javascript
使用Vuex解决Vue中的身份验证问题
Sep 28 Javascript
vue头部导航动态点击处理方法
Nov 02 Javascript
浅谈webpack和webpack-cli模块源码分析
Jan 19 Javascript
javascript实现打砖块小游戏(附完整源码)
Sep 18 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
Nov 04 Javascript
小程序组件传值和引入sass的方法(使用vant Weapp组件库)
Nov 24 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
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
Zend Framework动作助手Json用法实例分析
2016/03/05 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
jquery 问答知识整理
2010/02/11 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
学习Bootstrap组件之下拉菜单
2015/07/28 Javascript
学习JavaScript设计模式之状态模式
2016/01/08 Javascript
盘点javascript 正则表达式中 中括号的【坑】
2016/03/16 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
完美解决通过IP地址访问VUE项目的问题
2020/07/18 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
python实现360皮肤按钮控件示例
2014/02/21 Python
Python SQLite3数据库操作类分享
2014/06/10 Python
python通过imaplib模块读取gmail里邮件的方法
2015/05/08 Python
Python实现建立SSH连接的方法
2015/06/03 Python
PyCharm 常用快捷键和设置方法
2017/12/20 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
商超业务员岗位职责
2014/03/12 职场文书
幼儿园毕业典礼主持词
2014/03/21 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
2019消防宣传标语!
2019/07/10 职场文书
php去除deprecated的实例方法
2021/11/17 PHP
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技