ui-router(三)controller与template
这篇就是在以前的基础上,把客户端angular.js 负责的部分整体串起来演示一下.
我们按照angular执行顺序来做前提准备:
(1)Client 根目录下 index.html 首先加载angular.js 和 ui-router.js 文件
<script src="http://cdn.bootcss.com/angular.js/1.3.8/angular.min.js"></script>
<script src="./vender/angular-ui-router-0.2.13.js"></script>
(2)引用 app.js
<script src="/app.js"></script>
此文件是 gulpfile.js 通过配置任务生成的一个文件,此文件包含了 angular.js 使用的 router 配置,controller控制器脚本,服务,组件,过滤器及初始化注册config配置等.
(3)指定 angular.js 接管部分及视图填充部分
<html ng-app="YIJIEBUYI”> //angular.js 接管标识
…….
<body>
<div ui-view="container" id="BodyContainer”> //模板视图填充部分 </div>
</body>
(4)scripts 根目录下创建一个 main.js 的初始化注册脚本.
angular.module('YIJIEBUYI', ['ui.router']) .config(['$locationProvider', '$urlRouterProvider', function($locationProvider, $urlRouterProvider) { $urlRouterProvider.otherwise("/blog"); }]);
前面的文章已经说过了 module 下面几个重要的 api ,config 对于常用功能服务及公用模块的初始化注册起到了很重要的角色.因为我们从头到尾要用到 ui.router 模块来解析路由,所在这里注册.
我们在前面的博文里说过了,angular.js默认路由导航还是需要 ng-Route模块,所以我们在 main.js 里面用 ng-Route 模块的 urlRouterProvider 服务指定了一个启动默认路由定位到 /blog
就是这一句的作用 $urlRouterProvider.otherwise("/blog");
(5)定制路由
routes 根目录下我们创建一个 blog.js的脚本文件
angular.module('YIJIEBUYI').config(['$stateProvider',function($stateProvider){
$stateProvider.state('blog',{
url:'/blog',
views:{
'container':{templateUrl:'templates/blog_layout.html'}
}
}).state('blog.detail',{
url:'/:blogID',
views:{
'container':{templateUrl:'templates/blog_detail.html'}
}
});
}]);
上面我们依赖注入了 $stateProvider 服务,然后定制了2个路由 /blog 博客主页和 /blog/1234 博客详情页
(6)templates 目下创建模板视图
header.html
footer.html
这是页头和页脚视图,因为共用的地方很多,所以单独做成2个局部视图
blog.layout.html
这是博客首页,你也可以理解成母版页
<div ng-controller="blogLayoutCtrl"> <span>{{title}}</span>
<div ng-include="'templates/header.html'">header</div>
<div ui-view="container">
</div>
<div ng-include="'templates/footer.html'">footer</div>
</div>
你可以看到这个母版页里通过 ng-include 把通用的页头,页尾模板加载进来.
他有一个自己的控制器 ng-controller=“blogLayoutCtrl"
里面可以处理母版页的一些逻辑控制.
下面有 视图容器 <div ui-view="container"></div> 这里面可以装载嵌套视图
blog_detail.html
这是博客详情页
此视图只会嵌套在 blog_layout.html 母版页中,所以这个视图只需要关注自己所需要的逻辑即可
<div ng-controller="blogDetailCtrl" ui-view="container"> {{title}} </div>
他对应的控制器 blogDetailCtrl
(7)我们要在controllers根目录下创建上面所需要的2个控制器
母版页
blogLayoutCtrl.js
angular.module('YIJIEBUYI').controller('blogLayoutCtrl', ['$scope','$state',
function ($scope, $state) {
$scope.title='一介布衣-博客共用模板';
}
]);
博客详情页
blogDetailCtrl.js
angular.module('YIJIEBUYI').controller('blogDetailCtrl', ['$scope','$state',
function ($scope, $state) {
$scope.title='一介布衣-博客详情页';
}
]);
我们上面的controller 都给 $scope对象定义了一个title属性.
启动应用
zhangzhi@moke:~/code/work$ gulp
默认定位到 /blog 母版视图,
修改url到/blog/234234 定位到博客详情页视图
ui-router(三)controller与template的更多相关文章
- AngularJS 使用 UI Router 实现表单向导
Today we will be using AngularJS and the great UI Router and the Angular ngAnimate module to create ...
- 【原创】ui.router源码解析
Angular系列文章之angular路由 路由(route),几乎所有的MVC(VM)框架都应该具有的特性,因为它是前端构建单页面应用(SPA)必不可少的组成部分. 那么,对于angular而言,它 ...
- ngRoute 与ui.router区别
angular路由 路由 (route) ,几乎所有的 MVC(VM) 框架都应该具有的特性,因为它是前端构建单页面应用 (SPA) 必不可少的组成部分. 那么,对于 angular 而言,它自然也有 ...
- [转]AngularJS 使用 UI Router 实现表单向导
本文转自:http://www.oschina.net/translate/angularjs-multi-step-form-using-ui-router 今天我们将使用AngularJs和伟大的 ...
- angular 的ui.router 定义不同的state 对应相同的url
Angular UI Router: Different states with same URL? The landing page of my app has two states: home-p ...
- vue mandmobile ui实现三列列表的方法
vue mandmobile ui实现三列列表的方法 请问这种列表的要用那个组件好呢?Cellitem 只能用到两列,这个要三列的怎么弄?mand的好像没有listview,grid组件的 问了man ...
- angularjs ngRoute和ui.router对比
ngRoute模块是angularjs自带的路由模块,ui.router是一个第三方路由模块,接下来将对两者进行一个对比: ng-router(angular-router.js) ng-view n ...
- angular ui.router 路由传参数
angular已经用了一段时间了,最近在做路由,做一下笔记. 路由跳转的时候进行穿参 ui.router方式 <a ui-sref="edit({id:5})"> 编辑 ...
- ngRoute 和 ui.router 的使用方法和区别
在单页面应用中要把各个分散的视图给组织起来是通过路由机制来实现的.本文主要对 AngularJS 原生的 ngRoute 路由模块和第三方路由模块 ui.router 的用法进行简单介绍,并做一个对比 ...
随机推荐
- fmri资源站点
1. MRI analysis tutorials:http://www.mccauslandcenter.sc.edu/CRNL/wp-content/tools/tutorial/index.h ...
- Python验证码识别处理实例
一.准备工作与代码实例 1.PIL.pytesser.tesseract (1)安装PIL:下载地址:http://www.pythonware.com/products/pil/(CSDN下载) 下 ...
- JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别以及接口里default方法
使用大写字母A,B,C,D......X,Y,Z定义的,就都是泛型,把T换成A也一样,这里T只是名字上的意义而已 ? 表示不确定的java类型 T (type) 表示具体的一个java类型 K V ( ...
- @Redis Desktop Manager无法连接虚拟机中启动的redis服务问题解决
Redis Desktop Manager下载地址 https://redisdesktop.com/download 安装好以后连接linux服务器上的Redis服务器错误: 问题排查: 1.检查R ...
- jquery判断滚动条是否到底部
clientHeight:这个元素的高度,占用整个空间的高度,所以,如果一个div有滚动条,那个这个高度则是不包括滚动条没显示出来的下面部分的内容.而只是单纯的DIV的高度. offsetHeight ...
- 设计模式(一)简单工厂(创建型)(Java&&PHP)
面向对象设计的基本原则 单一职责系统中的每一个对象应该只有一个单独的职责,所有对象关注的应该是自身职责的完成. 基本思想:高内聚,低耦合. 开闭原则一个对象对扩展开放,对修改关闭.基本思想:对类的改动 ...
- 【Python】Django用户、认证、鉴权模块使用
此文是总结Django官方网站里面的Document的文章 User authentication in Django http://www.djangoproject.com/documentati ...
- binlog的几种复制形式
binlog的几种复制形式 MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式 ...
- weblogic 内存 及 内存溢出
. 区分JVM虚拟机选项:Xms Xmx PermSize MaxPermSize JVM限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制 ...
- KineticJS教程(8)
KineticJS教程(8) 作者: ysm 8.动画 动画就是一帧帧的画面按照时间间隔显示出来,Kinetic给我们提供了一个舞台对象的onFrame方法,用这个方法可以绑定一个动画方法,我们要显 ...