angular js如何配置 ui router

背景介绍

什么是ui-router?,

AngularUI Router是AngularUI 团队开发的一个AngularJS路由模块,相比AngularJS的标准路由ngRoute,它更灵活。与集成的ngRoute服务不同的是,UI-Router可以将视图嵌套,因为它基于的是操作状态而仅非URL。

与传统做法使用ng-view不同的是,在ui-Route里需要使用ui-view服务。当在ui-router中处理路由和状态时,开发者的重心是当前的状态是什么以及在哪一个页面里。

UI-Router被认为是AngularUI为开发者提供的最实用的一个模块,它是一个让开发者能够根据URL状态来组织和控制界面UI的渲染,而不是仅仅只改变路由(传统AngularJS应用实用的方式)。

该模块为开发者提供了很多视图(view)的控制。开发者可以创建嵌套分层的视图、在同一个页面使用多个视图、让多个视图控制某个视图等更多的功能。

即使是非常复杂的web应用,UI-Router也可以极佳地驾驭。

知识刨析

什么是router

在web开发中,router是根据jur分配到对应的处理程序,我们也可以说,路由的作用就是解析url地址,根据路由状态,来决定当前是在那个页面。

客户端的请求是,以url的形式传递给服务器,在传统的开发中,urld对应服务器上某个目录上的文件。而在MVC开发则是改变了z这种对应关系,web服务器会截获所以请求,不会检测我们的资源是否存在,直接发给网页路由器,路由器在调用相关的控制器,控制器d调用相关的服务,然后路由器再从视图对象中,提取生好的网页代码返回web服务器最终返回客户端。

为什么要使用路由呢?

在传统的web开发中,每一个请求地址都会让服务器去进行处理,但是用户有些操作时无需请求服务的,直接页面端修改一下逻辑就可以达到目的。这种情况下我们最好的方法就是使用路由。

也许有人会问,这个时候,我们直接使用js去处理不就行了,使用js直接处理时可以的。事实上之前也是这么干的。但是这样做不方便用户收藏当前页面。因为js时不会更强url地址的。

但是我们使用路由的话,url随着改变的,用户浏览到网页可以直接进行复制,或者是收藏当前页的url给别人,这样无论是对用户还是对搜索引擎来说,都i是友好的。

简单的说,不使用路由的话,使用js加载页面会导致,在用户体验上面会是一场在灾难。你能想象的出,你找到一篇博客,然后无法把内容的地址给保存下来的感觉吗?

常见问题,

如何使用,angular ui-router。

解决问题

方法1,我们使用包管理器,yarn,bower,npm这种来使用命令行进行安装。

方法2,bootcdn,引入文件。注(在此之前我们必须要引入jquery,与angular.js)

第二步,搭建我们的路由。

在此之前,我们必须要保证,自己引入的文件顺序以及cdn可以正常访问。可以在谷歌浏览器里,f12,network里面查看。

此后,html于js,声明angular.js主模块,并把ui-router传入主模块。

<html lang="en" ng-app="myApp">
var myApp = angular.module("myApp",['ui.router']);

下面, 声明$stateProvider,并且把$urlRouteProvider ,作为路由引擎作为函数参数传入。

myApp.config(function ($stateProvider,$urlRouterProvider) {

默认路由页面。如果没有路由引擎能匹配当前的导航转来,就默认讲展示background页面。

$urlRouterProvider.when("", "/background");

页面加载好,被第一个使用的路由。

.state("background",{
   url:"/background",//url地址
   templateUrl:"vivw/background.html",//加载的html模板
})

angualr uirouter最强大的地方,在于,可以使用它去跳转传参,以及可以进行路由嵌套。

我们先说路由嵌套。

嵌套视图时ui-router于ng-router最大的区别,这也是备受青睐的原因。

在使用嵌套视图的时候,我们必须要的子视图之前必须加上上一层视图的状态名。


.state("background.login",{
   url:"/login",
   templateUrl:"vivw/login.html."
})

background页面需要设置,vive,为了发给其他视图显示的地方。

使用跳转传参的话,我们需要注意的点在于,首先在路由上面parms,或者url,parms设置要接受的参数,并且值为null。

.state("red",{
   url:"/red",
   params:{"test":null},
   templateUrl:"vivw/red.html",
})

然后·我们在目标页面的控制器里面注入$stateparms获取参数就行了。

myApp.controller("red",function ($scope,$state,$stateParams) {
   $scope.skip=function () {

       $state.go("background.login")
   };
   $scope.look=function () {
       console.log($stateParams);
       console.log($stateParams.obj);
   }
});

扩展思考

那么什么是,url呢?

uri俗称网页地址,直译的话,是统一资源定位符。但是网页地址并不是http,和https,网址url,和链接lick,超链接hyperlinkk。关系有些微妙。

uri的意思是统一资源标识符,在互联网中就是通过uri来访问互联网资源的,uri分出来了2个子集,一个是我们常常听到提起的,url,另一个就是urn。

uri更倾向于,标识我们的这个资源是什么东西。

url跟urI的的名字有点接近,是统一资源定位符,我们可以通过url,准确的定位一个资源的位置,并且去访问它,url地址就是该文件在服务器的根目录的相对路径。

urn,是表示一个实体的标记符,但是不能给你资源的位置,我不知道这个资源在哪,但是我知道这个资源的名字

,id,我就可以找到你。

更多讨论

Q1:

ng-router和ui-router有什么区别?

A1:

ngRoute在路由配置时用$routeProvider。

ui-router路由配置时用 $stateProvider 和$urlRouterProvider。

ngRoute是官方路由。

ui-route是第三方路由。

ngroute是用AngularJS框架的核心部分。

ui-router是一个社区库,它是用来提高完善ngroute路由功能的。

ui-router允许嵌套视图(nested views)和多个命名视图(multiple named views)。

猜你喜欢

转载自www.cnblogs.com/zyxn/p/11088986.html