<!DOCTYPE html> <html lang="en" ng-app="App"> <head> <meta charset="UTF-8"> <title>AngularJS 路由-参数,模块配置,布局模板</title> <style> body { padding: 0; margin: 0; background-color: #F7F7F7; font-family: Arial; } .wrapper { max-width: 980px; margin: 50px auto; } ul { padding: 0; margin: 0; overflow: hidden; list-style: none; background-color: #000; border-radius: 4px; } li { float: left; width: 120px; height: 40px; text-align: center; line-height: 40px; font-size: 18px; } li.active { background-color: #333; } li a { display: block; color: #FFF; text-decoration: none; } .content { margin-top: 30px; font-size: 24px; padding: 0 20px; } </style> </head> <!-- 路由: 一个应用是由若个视图组合而成的,根据不一样的业务逻辑展现给用户不一样的视图 ,路由则是实现这一功能的关键. 在后端开发中经过URL地址能够实现页面(视图)的切换,可是AngularJS是一个纯前端MVC框架, 在开发单页面应用时,全部功能都在同一页面完成,因此无需切换URL地址(即不容许产生跳转), 但Web应用中又常常经过连接(a标签)来更新页面(视图),当点击连接时还要阻止其向服务器发起请求, 经过锚点(页内跳转)能够实现这一点。 路由参数: 一、提供两个方法匹配路由,分别是when和otherwise,when方法须要两个参数, otherwise方法作为when方法的补充只须要一个参数,其中when方法能够被屡次调用。 二、第1个参数是一个字符串,表明当前URL中的hash值。 三、第2个参数是一个对象,配置当前路由的参数,如视图、控制器等。 a、template 字符串形式的视图模板 b、templateUrl 引入外部视图模板 c、controller 视图模板所属的控制器 d、redirectTo跳转到其它路由 四、获取参数,在控制中注入$routeParams能够获取传递的参数 SPA:(Single Page Application)指的是通单一页面展现全部功能, 经过Ajax动态获取数据而后进行实时渲染, 结合CSS3动画模仿原生App交互, 而后再进行打包(使用工具把Web应用包一个壳, 这个壳本质上是浏览器)变成一个“原生”应用。 在PC端也有普遍的应用,一般状况下使用Ajax异步请求数据,而后实现内容局部刷新, 局部刷新的本质是动态生成DOM,新生成的DOM元素并无真实存在于文档中, 因此当再次刷新页面时新添加的DOM元素会“丢失”,经过单页面应能够很好的解决这个问题 SPA(单页面应用条件): 一、只有一页面 二、连接使用锚点 hashchange: AngularJs实现单一页面能够经过hashchange事件监听到锚点的变化, 进而能够实现为不一样的锚点准备不一样的视图,单页面应用就是基于这一原理实现的。 AngularJS对这一实现原理进行了封装,将锚点的变化封装成路由(Route),这是与后端路由的根本区别。 --> <body> <div class="wrapper"> <!-- 导航菜单 --> <ul> <li class="active"> <a href="#/index">Index</a> </li> <li> <a href="#/introduce">Introduce</a> </li> <li> <a href="#/contact">Contact Us</a> </li> <li> <a href="#/list">List</a> </li> </ul> <!-- 内容 --> <div class="content"> <!--4 布局模板 占位符 --> <div ng-view></div> </div> </div> <!-- AngularJS核心框架 --> <script src="./libs/angular.min.js"></script> <!-- 1 路由模块理解成插件 --> <script src="./libs/angular-route.js"></script> <script> //2 实例化模块(App)时,当成依赖传进去(模块名称叫ngRoute) var App = angular.module('App', ['ngRoute']); //3 配置路由模块,使其正常工做 App.config(['$routeProvider', function ($routeProvider) { $routeProvider.when('/index', { // template: '<h1>index Pages!</h1>', templateUrl: './abc.html' }) .when('/introduce', { template: '<h1>introduce Pages!</h1>' }) .when('/contact', { // template: '<h1>contact US Pages!</h1>', templateUrl: './contact.html', controller: 'ContactController' // 定义控制器 }) .when('/list', { templateUrl: './list.html', // 视图模板 controller: 'ListController' // 定义控制器 }) .otherwise({ redirectTo: '/index' }); }]); // 列表控制器 App.controller('ListController', ['$scope', '$http', function ($scope, $http) { // 模型数据 // $scope.items = ['html', 'css', 'js']; $http({ url: 'xxx.php', }).success(function (info) { $scope.items = info; //php 返回值['html', 'css', 'js']; }); }]); App.controller('ContactController', ['$scope', '$http', function ($scope, $http) { $http({ url: 'contact.php' }).success(function (info) { $scope.content = info; }); }]); </script> </body> </html>
ngRoute 不能够嵌套路由。php
须要嵌套路由就得用ui-router。css