Angular路由与多视图综合案例

时间:2023-03-10 02:06:36
Angular路由与多视图综合案例

Ajax请求存在的几个问题

(1)Ajax请求不会留下History 记录,会导致浏览器后退按钮失效

(2)用户无法直接通过URL进入应用中的指定页面(保存书签、链接分享给朋友)

(3)Ajax对SEO(Search Engine Optimization)是一个灾难

解决方案

(1)使用hash,监听hashchange事件来进行视图切换;(接下来将会说明的routeProvider路由机制)

(2)HTML5的history API,通过pushState()记录操作历史,监听popstate事件来进行视图切换,也有人把这叫pjax技术

Angular路由与多视图综合案例

如此一来,便形成了通过地址栏进行导航的深度链接(deeplinking ),也就是我们所需要的路由机制。通过路由机制,一个单页应用的各个视图就可以很好的组织起来了。

以上均参考整理来自走进AngularJs(八) ng的路由机制

定义路由$routeProvider表参数说明

//module
var app = angular.module('myApp', ['ngRoute', 'myAppController','myAppServer', 'myAppFilter']); //==============================================================================================
//$routeProvider提供了定义路由表的服务,它有两个核心方法,
// when(path,route)和otherwise(params)
// path是一个string类型,表示该条路由规则所匹配的路径,它将与地址栏的内容($location.path)值进行匹配
// route 参数是一个object,用来指定当path匹配后所需的一系列配置项,包括以下内容
// controller //function或string类型。在当前模板上执行的controller函数,生成新的scope
// controllerAs //string类型,为controller指定别名
// template //string或function类型,视图所用的模板,这部分内容将被ngView引用
// templateUrl
// resolve //指定当前controller所依赖的其他模块
// redirectTo //重定向的地址
app.config(function($routeProvider){
$routeProvider.when('/main', {
//string或function类型,当视图模板为单独的html文件或是使用了<script type="text/ng-template">定义模板时使用
templateUrl:'templ/list.html',
//function或string类型。在当前模板上执行的controller函数,生成新的scope
controller : 'listController'
}).when('/edit/:id', {
templateUrl:'templ/edit.html',
controller : 'editController'
}).when('/view/:id', {
templateUrl:'templ/view.html',
controller : 'viewController'
}).when('/about', {
templateUrl:'templ/about.html',
controller : ''
}).when('/routeDetail', {
templateUrl:'templ/routeDetail.html',
controller: ''
}).otherwise({
//重定向的地址
redirectTo: '/main'
});
});

$routeProvider路由与多视图综合案例

Angular路由与多视图综合案例

上述案例源代码下载请点击

遇到Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.

解决方案请狠狠点击这里