这篇就是在以前的基础上,把客户端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. 怎样教你牢记17个的Win7快捷键!

    常规快捷键在开始使用Win7中神奇的快捷键加速我们的电脑操作之前,先给大家介绍几个从Win2000到现在一直通用的“资源管理器”快捷键,权当作热身吧!Win+E: 打开“资源管理器”.Win+R: 打 ...

  2. Linux文件目录的一点小结

    转载:http://blog.chinaunix.net/uid-29171357-id-3889735.html 1. 相关指令:      chgrp:改变文件所属用户组 点击(此处)折叠或打开 ...

  3. 怎样用git提交多次改动

    在提交完代码后,我们发现所改动的文件还有须要完好的地方,可是我们已经upload过了可是还未合入到库上,此时要提交新的改动有两种做法: 一是等上次的改动合入到库上后,再次upload提交一次,这明显是 ...

  4. Robot Framework 安装及环境配置

    Robot Framework 安装及环境配置 Robot Framework 介绍 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以 ...

  5. @使用javap反编译Java字节码文件

    在Sun公司提供的JDK中,就已经内置了Java字节码文件反编译工具javap.exe(位于JDK安装目录的bin文件夹下). 我们可以在dos窗口中使用javap来反汇编指定的Java字节码文件.在 ...

  6. 如何设置Win7不待机 Win7进入待机状态会断网的解决方法

    电脑一旦进入待机状态后,会断网,应用将停止运行,因此需要设置电脑不待机来解决,这种情况需要挂一些游戏或者下载应用的时非常实用,下面就与大家分享下电脑不待机的设置方法,感兴趣的朋友可以参考下 有时候我们 ...

  7. Spark学习散点总结

    使用Spark 时,通常会有两种模式.一.在交互式编程环境(REPL, a.k.a spark-shell)下实现一些代码,测试一些功能点.二.像MapReduce 那样提前编写好源代码并编译打包(仅 ...

  8. idea maven项目模块中的Content Root

  9. [Functional Programming] Function signature

    It is really important to understand function signature in functional programming. The the code exam ...

  10. Onvif鉴权实现方式

    Onvif鉴权实现方式 Digest = B64ENCODE( SHA1( B64DECODE( Nonce ) + Date + Password ) ) gsoap中digest生成代码: int ...