ngRoute 和 ui.router 的使用方法和区别
在单页面应用中要把各个分散的视图给组织起来是通过路由机制来实现的。本文主要对 AngularJS 原生的 ngRoute使用方法1) 引入 无论是 <script src="lib/angular-route.js"></script> 2) 配置路由 var app = angular.module('ngRouteApp',['ngRoute']); app.config(function($routeProvider){ $routeProvider .when('/Main',{ templateUrl: "main.html",controller: 'MainCtrl' }) .otherwise({ redirectTo: '/tabs' }); 服务与指令
ui.router使用方法1) 引入 <script src="lib/angular-ui-router.min.js"></script> 2) 配置路由 var app = angular.module("uiRouteApp",["ui.router"]); app.config(function($urlRouterProvider,$stateProvider) { $urlRouterProvider.otherwise("/index"); $stateProvider .state("Main",{ url: "/main",templateUrl: "main.html",controller: 'MainCtrl' }) 服务与指令
路由的创建基本配置调用 $stateProvider .state("Main",{ url: "/main",templateUrl: 'main.html',controller: 'MainCtrl',}) parent有两种方式可以指定父子状态关系。 一种是,使用点标记法,像本文最后嵌套视图部分举得栗子那样:
另一种是,使用 .state("tab1",{ parent: 'tabs' // 也可是一个状态对象, parent: tabs }) abstract使用 $stateProvider .state('contacts',{ abstract: true,url: '/contacts',templateUrl: 'contacts.html',}) .state('contacts.list',{ url: '/list',templateUrl: 'contacts.list.html' }) resolve
resolve: { 'myResolve': ['contacts',function(contacts){ return contacts.all(); }] } 这样做的目的:
更多参数可参考angular 系列八 ui-router详细介绍及ngRoute工具区别中 state 参数的讲解。 路由控制
1) 使用花括号的方式可以设置一个正则表达式规则的参数: //只会匹配 pageId 为1到8位的数字 url: "/pages/{pageId:[0-9]{1,8}}" 可以通过 //比如匹配 href="/page?type='new'" url: "/page?type" 如果需要不止一个查询参数,用 //比如匹配 ui-sref="page({type:'all',title:'test ui-router'})" url: "/page?type&title" 路由的查找匹配
在视图中,建议使用 两者区别
嵌套视图页面某个动态变化区块中,嵌套着另一个可以动态变化的区块。 前面的栗子就是一个很好的业务场景。 在首页中包含一个动态区块: <body ng-app="ngRouteApp"> <h3>AngularJS UI-Router Tabs</h3> <div ng-view></div> </body> 在标签页中又包含动态区块: <div> <span><a href="#/tab1">Page-1</a></span> <span><a href="#/tab2">Page-2</a></span> <span><a href="#/tab3">Page-3</a></span> </div> <div ng-view></div> 一运行,报了一个这样的错误: RangeError: Maximum call stack size exceeded
发现浏览器崩溃了,因为 使用 $stateProvider .state("tabs",{ url: "/tabs",templateUrl: "pageTab.html" }) .state("tabs.tab1",{ url: "/tab1",templateUrl: "tab1.html" }) 其他区别ui-router(左) : ngRoute(右)
参考
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |