angular 使用 ui-router 设计网页
2016-06-02 11:20
477 查看
版权声明:本文为 松阳 (blog.csdn.net/fansongy) 原创文章,转载务必注明出处。
目录(?)[+]
文章作者:松阳
本文出自
阿修罗道,禁止用于商业用途,转载请注明出处。
原文链接:http://blog.csdn.net/fansongy/article/details/44162685
我们访问page1,然后访问page2....
在新的模型中它变成了这个样子:
访问效果是一样的,但是从设计上已经有了变化。它变成了:只有一张网页,在网页中有不同的区域,每个区域都可擦写。仔细想想好像也挺常见的,不知道其他技术是不是也这样
下载js文件,引入到
在html中,添加注入位置:
在html中,添加触发器:
在app.js中,配置路由函数
细说一下:
。
[cpp] view
plain copy
print?
//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中。
[html] view
plain copy
print?
<ul>
<li ui-sref-active="active" class="item">
<a href ui-sref="app.user({user: 'fansy'})">@fansy</a>
</li>
</ul>
当user是fansy时,显示后面那行字。这个例子是官方的,我是没用明白这个功能,回头在研究吧。
首先是
它通常用来配置非
[cpp] view
plain copy
print?
$urlRouterProvider.when("","/home");
将默认页设置为/home的URL。注意哦,这里用的是URL,别写错成state了。
当然也可以写一个任何额外页面的定向:
[cpp] view
plain copy
print?
$urlRouterProvider.otherwise("/home");
这样访问其他阿猫阿狗的页面,就都跑到/home那去了。
[cpp] view
plain copy
print?
$state.go('home.state1');
另外,你也可以在$stateProvider 中对应的state里面配置controller,当这种state被激活,就会调用对应的函数了,例如:
[javascript] view
plain copy
print?
$stateProvider
.state("home",{
url:"/home",
templateUrl:"tmpls/home.html",
controller:function($scope,$state) {
console.log("enter home");
}
})
每当状态变为home时,都输出一条日志。
最后,渲染是按层级来的。因此改变同级节点并不会重新渲染父节点。并且不改变状态就不会重新渲染。比如一直按同一个按钮,就不会重新渲染;没更改跟节点,点一个"刷新"按钮,也不会刷新整个页面。
目录(?)[+]
文章作者:松阳
本文出自
阿修罗道,禁止用于商业用途,转载请注明出处。
原文链接:http://blog.csdn.net/fansongy/article/details/44162685
这是个啥?
ui-router是一个web客户端的路由解决方案。我觉得它最大的作用是将web界面的设计分块了。分块分层
最初的web访问模型,是这样的:我们访问page1,然后访问page2....
在新的模型中它变成了这个样子:
访问效果是一样的,但是从设计上已经有了变化。它变成了:只有一张网页,在网页中有不同的区域,每个区域都可擦写。仔细想想好像也挺常见的,不知道其他技术是不是也这样
代码实现
原理讲完再简述一下实现吧下载js文件,引入到
index.html文件中。
在html中,添加注入位置:
<div ui-view="">。它是当被触发注入时,填充的位置。
在html中,添加触发器:
<ANY ui-sref="XXX">。XXX是$state,它遵循xxx.xxx的树形结构,渲染时从根节点开始渲染。
在app.js中,配置路由函数
.config(function($stateProvider, $urlRouterProvider) {});
细说一下:
引入代码
没啥要细说的,要说就是路径别写错吧。
注入位置
对于多个分栏的结构,可以使用多个view的实现,然后反过来在config中使用bbb@AAA的声明指定本state中子view对应的模板,例如:
[cpp] view
plain copy
print?
//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",未激活状态时,它是看不到的。具体描述可以看下官网. 通常我们都是激活状态,但有时总想自己控制一下。可以参考:
[html] view
plain copy
print?
<ul>
<li ui-sref-active="active" class="item">
<a href ui-sref="app.user({user: 'fansy'})">@fansy</a>
</li>
</ul>
当user是fansy时,显示后面那行字。这个例子是官方的,我是没用明白这个功能,回头在研究吧。
配置路由
首先是 $urlRouterProvider
它通常用来配置非 $state的额外的路由.例如:
[cpp] view
plain copy
print?
$urlRouterProvider.when("","/home");
将默认页设置为/home的URL。注意哦,这里用的是URL,别写错成state了。
当然也可以写一个任何额外页面的定向:
[cpp] view
plain copy
print?
$urlRouterProvider.otherwise("/home");
这样访问其他阿猫阿狗的页面,就都跑到/home那去了。
然后是 $stateProvider
触发点是按层级来的,它遵守的路由规则可以从官网的,这个页面 中找到。通过$state.go函数可以将状态位置强行切换,我们可以在任何一处写下面的js代码:
[cpp] view
plain copy
print?
$state.go('home.state1');
另外,你也可以在$stateProvider 中对应的state里面配置controller,当这种state被激活,就会调用对应的函数了,例如:
[javascript] view
plain copy
print?
$stateProvider
.state("home",{
url:"/home",
templateUrl:"tmpls/home.html",
controller:function($scope,$state) {
console.log("enter home");
}
})
每当状态变为home时,都输出一条日志。
最后,渲染是按层级来的。因此改变同级节点并不会重新渲染父节点。并且不改变状态就不会重新渲染。比如一直按同一个按钮,就不会重新渲染;没更改跟节点,点一个"刷新"按钮,也不会刷新整个页面。
最后
其他详细可以看它的主页 ,另外有一篇 好文章 也值得借鉴.相关文章推荐
- UITableView 常用的委托方法:
- ArrayBlockingQueue和LinkedBlockingQueue的使用
- UITabBarViewControllerDelegate
- Incorrect string value异常解决
- Infinite Sequence
- easyui 学习笔记
- Java并发基础知识(内存栅栏+volatile+synchronized详解+java锁优化+wait notify+AbstractQueuedSynchronizer详解+线程中断)
- discuz搬家后报错SQL:SELECT value FROM [Table]vars WHERE name=’noteexists1′的解决办法
- GITHUB来获得UE4源代码
- apue编程之参考du代码利用递归写的一个简单的du命令的源代码
- Sequence Alignment
- apue编程之参考df代码写的一个简单的df命令的源代码
- 使用QueueUserWorkerItem实现的线程池封装
- UICollectionView重用时的视图重叠
- Errors running builder 'DeploymentBuilder' on project '工程名' xxxNullpointException
- 构建属于自己的ORM框架之二--IQueryable的奥秘
- 简化原生效果_集成UITableViewCell左滑多个按钮
- ValidateRequest问题
- Android Handler,Looper,MessageQueue 机制
- iOS UITableView之cellForRowAtIndexPath和indexpathForCell分别获取指定cell和indexpath