这篇就是在以前的基础上,把客户端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. Ext Connection

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  2. dwz关闭当前dialog

    首先,前台代码如下: <form method="post" class="pageForm required-validate" onsubmit=&q ...

  3. MS Sql Server 中主从库的配置和使用介绍

    网站规模到了一定程度之后,该分的也分了,该优化的也做了优化,但是还是不能满足业务上对性能的要求:这时候我们可以考虑使用主从库. 主从库是两台服务器上的两个数据库,主库以最快的速度做增删改操作+最新数据 ...

  4. 电子书mobi的格式详解

    https://wiki.mobileread.com/wiki/MOBI#Format Like PalmDOC, the Mobipocket file format is that of a s ...

  5. JOIN与EXISTS(子查询)的效率研究

    使用MySQL提供的Sample数据库Sakila 现将profiling打开,用来一会查看sql执行时间 set profiling=1; exists 子查询与 join联接效率的对比,功能:查看 ...

  6. Unity的shader学习2

    下面继续看基于surface的shader代码,基本与Vertex&Fragment shader差不多,只是不能写pass,然后只需要声明surface函数,就能处理所有的事情. Shade ...

  7. 科普:UTF-8 GBK UTF8 GB2312 之间的区别和关系

    UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM.是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三 ...

  8. Android -- ContentProvider与联系人

    数据库                                                                                         读联系人 raw ...

  9. 公司上线流程 pushonline_alpha

     这是在公司将服务部署上线的一个记录,只是部署很小的python脚本,各公司不同,参考性不是很大 开始吧(版本管理是git) 1.整理好代码后:git add xxx.py git commit -m ...

  10. [Compose] 9. Delay Evaluation with LazyBox

    We rewrite the Box example using lazy evaulation. Here is Box example: const Box = (x) => ({ map: ...