angularjsl路由_angularJs-route路由详解

本篇基于ng-route来讲下angular中的路由,路由功能主要是 $routeProvider服务 与 ng-view 实现。

ng-view的实现原理,是根据路由的切换,动态编译html模板——$compile(html)(scope)。

前提

首先需要在页面引入angular和angular-route,注意要在angular-route之前引入angular

这主要是因为angular-route.js需要传入window.angular这个参数,而这个参数只有在加载完angular才会出现。

(function(window, angular, undefined) {

'use strict';

...

ngRouteModule.directive('ngView', ngViewFactory);

...

})(window, window.angular);

下载可以去官网下载,或者使用bower进行安装。

讲解

路由功能是由 routeProvider服务 和 ng-view 搭配实现,ng-view相当于提供了页面模板的挂载点,当切换URL进行跳转时,不同的页面模板会放在ng-view所在的位置; 然后通过 routeProvider 配置路由的映射。

一般主要通过两个方法:

when():配置路径和参数;

otherwise:配置其他的路径跳转,可以想成default。

when的第二个参数:

controller:对应路径的控制器函数,或者名称

controllerAs:给控制器起个别名

template:对应路径的页面模板,会出现在ng-view处,比如"

xxxx
"

templateUrl:对应模板的路径,比如"src/xxx.html"

resolve:这个参数着重说下,该属性会以键值对对象的形式,给路由相关的控制器绑定服务或者值。然后把执行的结果值或者对应的服务引用,注入到控制器中。如果resolve中是一个promise对象,那么会等它执行成功后,才注入到控制器中,此时控制器会等待resolve中的执行结果。

详细的例子,可以参考下面的样例。

redirectTo:重定向地址

reloadOnSearch:设置是否在只有地址改变时,才加载对应的模板;search和params改变都不会加载模板

caseInsensitiveMatch:路径区分大小写

路由有几个常用的事件:

$routeChangeStart:这个事件会在路由跳转前触发

$routeChangeSuccess:这个事件在路由跳转成功后触发

$routeChangeError:这个事件在路由跳转失败后触发

使用

在页面中,写入URL跳转的按钮链接 以及 ng-view标签

其中,ng-view可以当作元素或者标签等。

JavaScript中需要定义跳转的相关配置

angular.module("myApp",["ngRoute"])

.controller("aController",function($scope,$route){

$scope.hello = "hello,a!";

})

.controller("bController",function($scope){

$scope.hello = "hello,b!";

})

.controller("myCtrl",function($scope,$location){

$scope.$on("$viewContentLoaded",function(){

console.log("ng-view content loaded!");

});

$scope.$on("$routeChangeStart",function(event,next,current){

//event.preventDefault(); //cancel url change

console.log("route change start!");

});

})

.config(function($routeProvider, $locationProvider) {

$routeProvider

.when('/a', {

templateUrl: 'a.html',

controller: 'aController'

})

.when('/b', {

templateUrl: 'b.html',

controller: 'bController',

resolve: {

// I will cause a 3 second delay

delay: function($q, $timeout) {

var delay = $q.defer();

$timeout(delay.resolve, 3000);

return delay.promise;

}

}

})

.otherwise({

redirectTo: '/a'

});

});

上面的代码中,/b路径中的resolve关联来一个延迟方法,这个方法返回的时Promise对象,而且3秒钟后才会返回结果。因此b页面,在3秒后才会加载成功。

额外还需要提供两个html:

a.html:

{{hello}}

以及b.html:

{{hello}}

这样,就可以实现路由的跳转了。

全部的代码可以参考:

angular.module("myApp",["ngRoute"])

.controller("aController",function($scope,$route){

$scope.hello = "hello,a!";

})

.controller("bController",function($scope){

$scope.hello = "hello,b!";

})

.controller("myCtrl",function($scope,$location){

$scope.$on("$viewContentLoaded",function(){

console.log("ng-view content loaded!");

});

$scope.$on("$routeChangeStart",function(event,next,current){

//event.preventDefault(); //cancel url change

console.log("route change start!");

});

})

.config(function($routeProvider, $locationProvider) {

$routeProvider

.when('/a', {

templateUrl: 'a.html',

controller: 'aController'

})

.when('/b', {

templateUrl: 'b.html',

controller: 'bController',

resolve: {

// I will cause a 1 second delay

delay: function($q, $timeout) {

var delay = $q.defer();

$timeout(delay.resolve, 3000);

return delay.promise;

}

}

})

.otherwise({

redirectTo: '/a'

});

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
route命令是一种用于管理网络路由表的命令。通过route命令,可以设置和修改主机和网络之间的跃点数。 在路由表中,每条路由都有一个跃点数的整数值。跃点数可以理解为数据包在网络中跳过路由器的数量。当我们通过命令route add来添加一条新的路由时,可以使用参数-m来指定所需的跃点数。 跃点数的作用是为了确定数据包应该经过多少个跳跃路由器才能到达目标主机。每个跳跃路由器都会将数据包从一个网络中转发到另一个网络,直到数据包达到目标主机。通过指定所需的跃点数,可以影响数据包进入网络的路径选择以及路由的优先级。 例如,假设我们要设置一条路由,目标主机的跃点数为3。我们可以使用命令route add destination_gateway -p metric 3来添加这条路由,其中destination是目标主机的IP地址,gateway是下一跳的IP地址。通过制定metric参数为3,我们告诉系统数据包需要经过3个跳跃路由器才能到达目标主机。 通过route命令设置和修改跃点数的整数值,可以影响网络的路由选择和优先级。低跃点数意味着路径更短,可能选择更快的网络通道,但也可能会增加网络拥塞的风险。高跃点数可能导致较长的路径选择,但也可能选择更稳定的网络通道。 因此,在使用route命令设置跃点数时,需要综合考虑网络的拓扑结构、速度和稳定性等因素,以便选择适合的跃点数,以达到最佳的网络性能和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值