【AngularJS】——核心特性之路由

前端之家收集整理的这篇文章主要介绍了【AngularJS】——核心特性之路由前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

上一篇文章【 AnglularJS】——几大核心特性(一)中,分享了AngularJS的两个特性:MVC和ng的模块化。今天介绍一下ng的路由机制。


1、AngularJS路由介绍

AngularJS路由功能主要实现一个视图跳转功能,合理管理用户在使用过程中看到的界面。通过路由的设置,根据当前访问的URL展示对应的视图。


ng的路由机制是靠ngRoute提供的,是一个单独的模块,包含以下内容
§ 服务$routeProvider用来定义一个路由表,即地址栏与视图模板的映射
§ 服务$routeParams保存了地址栏中的参数,例如{id : 1,name : 'yxm'}
§ 服务$route完成路由匹配,并且提供路由相关的属性访问及事件,如访问当前路由对应的controller
§ 指令ngView用来在主视图中指定加载子视图的区域


2、ng路由使用

1)添加:index.html

index页是主页面包含ng-app和视图ng-view以及所有需要的引用。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <Meta charset="utf-8">
  5. <Meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no,width=device-width">
  6. <title>routeTest</title>
  7. <link href="lib/ionic/css/ionic.css" rel="stylesheet">
  8. <link href="css/style.css" rel="stylesheet">
  9.  
  10. <!-- IF using Sass (run gulp sass first),then uncomment below and remove the CSS includes above
  11. <link href="css/ionic.app.css" rel="stylesheet">
  12. -->
  13.  
  14. <!-- ionic/angularjs js -->
  15. <script src="lib/ionic/js/ionic.bundle.js"></script>
  16.  
  17. <!-- cordova script (this will be a 404 during development) -->
  18. <script src="cordova.js"></script>
  19.  
  20. <!-- your app's js -->
  21. <script src="js/app.js"></script>
  22. <script src="js/controllers.js"></script>
  23. <script src="js/directives.js"></script>
  24. <script src="js/routes.js"></script>
  25. <script src="js/services.js"></script>
  26. </head>
  27. <body ng-app="itoo-basic-choosecourse">
  28.  
  29. <ion-nav-view></ion-nav-view>
  30.  
  31. </body>
  32. </html>

2)增加:/templates/tabs.html

这个页面是布局页面,是HTML的代码片段,通过这些按钮,可以进入相应的详细页面

  1. <ion-tabs class="tabs-icon-top tabs-color-active-balanced">
  2.  
  3. <ion-tab title="已选课程" icon-on="ion-star" icon-off="ion-star" ui-sref="tab.selectedCourses">
  4. <ion-nav-view animation="slide-left-right" name="tab-selectedCourses">已选课程</ion-nav-view>
  5. </ion-tab>
  6.  
  7. <ion-tab title="学生选课" icon-on="ion-pie-graph" icon-off="ion-pie-graph" ui-sref="tab.chooseCourses">
  8. <ion-nav-view animation="slide-left-right" name="tab-chooseCourses">学生选课</ion-nav-view>
  9. </ion-tab>
  10. <ion-tab title="学生退课" icon-on="ion-person" icon-off="ion-person" ui-sref="tab.dropCourses">
  11. <ion-nav-view animation="slide-left-right" name="tab-dropCourses">学生退课</ion-nav-view>
  12. </ion-tab>
  13. </ion-tabs>

3)增加/templates/detail.html

这个是内容模板,通过不同的URL进行加载访问

  1. <div class="bar bar-header bar-balanced">
  2. <h1 class="title">学生退课</h1>
  3. </div>
  4.  
  5. <ion-content class="padding">
  6. <br>
  7. <br>
  8. <div class="list">
  9. <div class="item item-avatar calm-bg">
  10. <img src="img/影视文学.jpg">
  11. <h2>影视文学</h2>
  12. <p>时间:周三</p>
  13. <p>剩余人数:35</p>
  14. </div>
  15. <div class="item item-avatar PaleGreen-bg">
  16. <img src="img/鬼谷子.jpg">
  17. <h2>鬼谷子</h2>
  18. <p>时间:周五</p>
  19. <p>剩余人数:50</p>
  20. </div>
  21. <div class="item item-avatar">
  22. <img src="img/影视文学.jpg">
  23. <h2>影视文学</h2>
  24. <p>时间:周三</p>
  25. <p>剩余人数:35</p>
  26. </div>
  27. <div class="item item-avatar">
  28. <img src="img/鬼谷子.jpg">
  29. <h2>鬼谷子</h2>
  30. <p>时间:周五</p>
  31. <p>剩余人数:50</p>
  32. </div>
  33. </div>
  34. </ion-content>


4)/js/route.js

添加的route,对页面跳转进行配置。angularjs提供了when和otherwise两个方法来定义路由。用config函数在特定的模块或应用中定义路由。

  1. angular.module('itoo-basic-choosecourse.routes',[])
  2.  
  3. .config(function($stateProvider,$urlRouterProvider) {
  4.  
  5. $stateProvider
  6. //如果是tab状态被激活,加载tabs.html模板,注意这里的abstract:true
  7. //表示tab只有在子状态显示的时候,它才显示,它本身是无法主动被激活的
  8. .state("tab",{
  9. url: "/tab",abstract: true,templateUrl: "templates/tabs.html",})
  10. //tab.message状态被激活,会显示tab-message.html模板,tab.message状态
  11. //是在tabs.html中的ui-sref中设置的。
  12. //同时注意views中的tab-message名字,这个也需要跟tabs.html中的ion-nav-view中的name一致
  13. .state('tab.selectedCourses',{
  14. url: '/selectedCourses',views: {
  15. 'tab-selectedCourses': {
  16. templateUrl: 'templates/tab-selectedCourses.html',controller: "selectedCoursesCtrl"
  17. }
  18. }
  19. })
  20.  
  21. //退课路由跳转,当url是dropCourses的时候,则跳转到templates/detail.html
  22. .state('tab.dropCourses',{
  23. url: '/dropCourses',views:{
  24. 'tab-dropCourses':{
  25. templateUrl: "templates/detail.html",controller: "dropCoursesCtrl"
  26. }
  27. }
  28. })
  29. //选课路由跳转,当url是chooseCourses的时候,则跳转到templates/chooseCourses.html 未建立此测试页
  30. .state('tab.chooseCourses',{
  31. url: '/chooseCourses',views:{
  32. 'tab-chooseCourses':{
  33. templateUrl: "templates/tab-chooseCourses.html",controller: "chooseCoursesCtrl"
  34. }
  35. }
  36. })
  37. //默认状态时tab.message
  38. $urlRouterProvider.otherwise("/tab/selectedCourses");
  39. });

实现效果




3、ng-view显示解析

ngView指令遵循以下规则:


1、每次路由转换时触发$routeChangeSuccess事件,视图都会更新。

2、如果某个模版同当前的路由相关联:创建一个新的作用域。移除上一个视图,同时上一个作用域也会被清楚。

将新的作用域同当前摹本关联在一起。

如果路由中有相关的定义,那么就把对应的控制器同当前作用域关联起来。

触发$viewContentLoaded事件。

如果提供了onload属性调用属性所指定的函数


------------------------------写在最后--------------------------

AngularJS还在处于不断积累阶段,欢迎各种大牛指教。

猜你在找的Angularjs相关文章