这篇就是在以前的基础上,把客户端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的更多相关文章

  1. AngularJS 使用 UI Router 实现表单向导

    Today we will be using AngularJS and the great UI Router and the Angular ngAnimate module to create ...

  2. 【原创】ui.router源码解析

    Angular系列文章之angular路由 路由(route),几乎所有的MVC(VM)框架都应该具有的特性,因为它是前端构建单页面应用(SPA)必不可少的组成部分. 那么,对于angular而言,它 ...

  3. ngRoute 与ui.router区别

    angular路由 路由 (route) ,几乎所有的 MVC(VM) 框架都应该具有的特性,因为它是前端构建单页面应用 (SPA) 必不可少的组成部分. 那么,对于 angular 而言,它自然也有 ...

  4. [转]AngularJS 使用 UI Router 实现表单向导

    本文转自:http://www.oschina.net/translate/angularjs-multi-step-form-using-ui-router 今天我们将使用AngularJs和伟大的 ...

  5. angular 的ui.router 定义不同的state 对应相同的url

    Angular UI Router: Different states with same URL? The landing page of my app has two states: home-p ...

  6. vue mandmobile ui实现三列列表的方法

    vue mandmobile ui实现三列列表的方法 请问这种列表的要用那个组件好呢?Cellitem 只能用到两列,这个要三列的怎么弄?mand的好像没有listview,grid组件的 问了man ...

  7. angularjs ngRoute和ui.router对比

    ngRoute模块是angularjs自带的路由模块,ui.router是一个第三方路由模块,接下来将对两者进行一个对比: ng-router(angular-router.js) ng-view n ...

  8. angular ui.router 路由传参数

    angular已经用了一段时间了,最近在做路由,做一下笔记. 路由跳转的时候进行穿参 ui.router方式 <a ui-sref="edit({id:5})"> 编辑 ...

  9. ngRoute 和 ui.router 的使用方法和区别

    在单页面应用中要把各个分散的视图给组织起来是通过路由机制来实现的.本文主要对 AngularJS 原生的 ngRoute 路由模块和第三方路由模块 ui.router 的用法进行简单介绍,并做一个对比 ...

随机推荐

  1. 4)linux程序设计入门--时间概念

    )程序设计入门--时间概念 前言:Linux下的时间概念 这一章我们学习Linux的时间表示和计算函数 时间的表示 时间的测量 计时器的使用 .时间表示 在程序当中,我们经常要输出系统当前的时间,比如 ...

  2. Android系统信息获取

    在Android中可以通过android.os.Build这个类和System.getProperty(“xxx”);来获取设备信息,下面列举的常见设备信息摘自Android群英传 Build.BOA ...

  3. 自动签到升级版(JS实现的每日定时任务)

    公司规定每日签到两次:日子太安逸了,有时候中午居然会忘记签到…… 于是,笔者寻思写一个自动签到的脚本:每天指定两个签到时段,每次打开页面,先检测当前是否为签到时段,如果在签到时段,则检查cookie中 ...

  4. android4.0 USB Camera实例(三)UVC

    前面我写了两篇文章说明了zc301的实现 详细请看 http://blog.csdn.net/hclydao/article/details/21235919 以下顺便把通用的USB也写上 前面的ZC ...

  5. 红帽RHOP 8 发布一条龙方案

    导读 日前,Canonical的Ubuntu在OpenStack的云系统方面处于业界领先地位.其他诸如IBM类顶级科技公司也有意加入OpenStack的混战,新的专用OpenStack公司(例如Mir ...

  6. [Transducer] Make Transducer works for Iteratable collection and Object

    We've seen how we can transduce from arrays or other iterables, but plain objects aren't iterable in ...

  7. 【Python】安装Python的mysql模块

    在控制台中输入pip install pymysql即可,以下是输出: C:\Users\horn1\Desktop\python\15>pip install pymysql Collecti ...

  8. (C++)函数参数传递中的一级指针和二级指针

    主要内容: 1.一级指针和二级指针 2.函数指针传递的例子 3.什么时候需要传递二级指针? 4.二级指针在链表中的使用 1.一级指针和二级指针 一级指针:即我们一般说的指针,就是内存地址: 二级指针: ...

  9. 机器学习实战之PCA

    1.  向量及其基变换 1.1 向量内积 (1)两个维数同样的向量的内积定义例如以下: 内积运算将两个向量映射为一个实数. (2) 内积的几何意义 如果A\B是两个n维向量, n维向量能够等价表示为n ...

  10. SqlInXml 动态配置化

    XML 描述方式. 整合Ognl+IBatis 根据Map型的输入参数, 动态组装Sql语句. 使用sqlRoot的 source="mysql01" 配置, 将自动读取mysql ...