angular 使用 ui-router 设计网页


文章作者:松阳

本文出自 阿修罗道,禁止用于商业用途,转载请注明出处。  

原文链接:http://blog.csdn.net/fansongy/article/details/44162685

width="150" height="210" frameborder="0" scrolling="no" src="http://widget.weibo.com/relationship/bulkfollow.php?language=zh_cn&uids=2080045857&wide=1&color=FFFFFF,FFFFFF,0082CB,666666&showtitle=0&showinfo=1&sense=0&verified=1&count=1&refer=http%3A%2F%2Fwww.himigame.com%2Fandroid-game%2F1521.html&dpc=1" style="font-size: 14px; font-weight: bold; border-width: 0px; margin: 0px; padding: 0px; font-family: arial, helvetica, clean, sans-serif; line-height: 16px;">







这是个啥?

ui-router是一个web客户端的路由解决方案。我觉得它最大的作用是将web界面的设计分块了。

分块分层

最初的web访问模型,是这样的:  


我们访问page1,然后访问page2.... 

在新的模型中它变成了这个样子:  


访问效果是一样的,但是从设计上已经有了变化。它变成了:只有一张网页,在网页中有不同的区域,每个区域都可擦写。仔细想想好像也挺常见的,不知道其他技术是不是也这样

代码实现

原理讲完再简述一下实现吧

  1. 下载js文件,引入到index.html文件中。
  2. 在html中,添加注入位置: <div ui-view="">。它是当被触发注入时,填充的位置。
  3. 在html中,添加触发器:<ANY ui-sref="XXX">。XXX是$state,它遵循xxx.xxx的树形结构,渲染时从根节点开始渲染。
  4. 在app.js中,配置路由函数 .config(function($stateProvider, $urlRouterProvider) {});

细说一下:

引入代码

没啥要细说的,要说就是路径别写错吧

注入位置

对于多个分栏的结构,可以使用多个view的实现,然后反过来在config中使用bbb@AAA的声明指定本state中子view对应的模板,例如:

//in js
$stateProvider
    .state('index', {
        url: '/index',
        views: {
            '': {
                templateUrl: 'tpls/index.html'
            },
            'main1@index': {
                templateUrl: 'tpls/form1.html'
            },
             'main2@index': {
                templateUrl: 'tpls/form2.html'
            }
        }
    })
    
//in html     
<div class="container">
    <div ui-view="main1"></div>
    <div ui-view="main2"></div>
</div>   

这个代码中将form1.html 和 form2.html 填充到了对应的的view中。

添加触发器

如果在标签中添加了 ui-sref="xxx",未激活状态时,它是看不到的。具体描述可以看下官网. 通常我们都是激活状态,但有时总想自己控制一下。可以参考:


	<ul>
	  <li ui-sref-active="active" class="item">
	    <a href ui-sref="app.user({user: 'fansy'})">@fansy</a>
	  </li>
	</ul>


当user是fansy时,显示后面那行字。这个例子是官方的,我是没用明白这个功能,回头在研究吧。

配置路由

首先是 $urlRouterProvider

它通常用来配置非 $state 的额外的路由.例如:

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

将默认页设置为/home的URL。注意哦,这里用的是URL,别写错成state了。

当然也可以写一个任何额外页面的定向:

$urlRouterProvider.otherwise("/home");

这样访问其他阿猫阿狗的页面,就都跑到/home那去了。

然后是 $stateProvider

触发点是按层级来的,它遵守的路由规则可以从官网的,这个页面 中找到。通过 $state.go 函数可以将状态位置强行切换,我们可以在任何一处写下面的js代码:

$state.go('home.state1');

另外,你也可以在$stateProvider 中对应的state里面配置controller,当这种state被激活,就会调用对应的函数了,例如:


	$stateProvider
		.state("home",{
			url:"/home",
			templateUrl:"tmpls/home.html",
			controller:function($scope,$state) {
				console.log("enter home");
			}
		})


每当状态变为home时,都输出一条日志。

最后,渲染是按层级来的。因此改变同级节点并不会重新渲染父节点。并且不改变状态就不会重新渲染。比如一直按同一个按钮,就不会重新渲染;没更改跟节点,点一个"刷新"按钮,也不会刷新整个页面。

最后

其他详细可以看它的主页 ,另外有一篇 好文章 也值得借鉴.

如果你觉得这篇文章对你有帮助,可以顺手点个,不但不会喜当爹,还能让更多人能看到它... 

  • 52
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
AngularJS `ui-view` 的使用通常涉及以下几个步骤: 1. 安装 AngularJS 和 AngularUI RouterAngularUI Router 是一个用于 AngularJS 的第三方路由模块,可以实现多视图和嵌套路由等功能。 2. 在 HTML 中定义 `ui-view` 指令,用于展示视图。可以定义一个或多个 `ui-view`,每个指令可以使用一个名字来标识。 3. 在 JavaScript 中配置路由,并指定与视图相关的模板和控制器。通常使用 `$stateProvider` 和 `$urlRouterProvider` 服务来配置路由。 下面是一个简单的示例,演示了如何使用 `ui-view` 展示两个页面: ```html <!DOCTYPE html> <html ng-app="myApp"> <head> <meta charset="utf-8"> <title>AngularJS UI-Router Demo</title> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/1.0.29/angular-ui-router.min.js"></script> <script> // 创建 AngularJS 应用程序 var app = angular.module('myApp', ['ui.router']); // 配置路由 app.config(function($stateProvider, $urlRouterProvider) { $stateProvider .state('home', { url: '/', templateUrl: 'home.html', controller: 'HomeController' }) .state('about', { url: '/about', templateUrl: 'about.html', controller: 'AboutController' }); $urlRouterProvider.otherwise('/'); }); // 控制器定义 app.controller('HomeController', function($scope) { $scope.message = 'Welcome to the homepage!'; }); app.controller('AboutController', function($scope) { $scope.message = 'Learn more about us!'; }); </script> </head> <body> <h1>AngularJS UI-Router Demo</h1> <nav> <a ui-sref="home">Home</a> <a ui-sref="about">About</a> </nav> <div ui-view></div> </body> </html> ``` 在上面的示例中,我们定义了两个路由:`home` 和 `about`。每个路由都指定了一个与之对应的模板和控制器。在 HTML 中,我们使用 `ui-sref` 指令来指定路由,并使用 `ui-view` 指令来展示视图。在这种情况下,我们只有一个 `ui-view`,因此没有必要给它指定任何名字。 当用户点击导航链接时,将会触发路由,对应的视图将会展示在 `ui-view` 中。在这个示例中,我们在 `HomeController` 和 `AboutController` 中定义了一些文本信息,用于展示在对应的视图中。 注意,使用 `ui-sref` 指令时,需要将路由名称作为参数传递给指令。这个名称应该与路由配置中的名称匹配。 这只是一个简单示例,实际应用中可能还需要更多的路由和视图。掌握了 `ui-view` 的基本使用方法之后,你可以继续学习 AngularUI Router 的更多功能,例如嵌套视图、路由参数等等。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值