ui-router多视图+嵌套视图+传参综合练习

为什么Angular项目用ui-router模块来代替内置的路由ng-router?

Angular.js 是一个用来构建“富客户端”的神奇JavaScript框架。但是事实却是许多开发者却不使用其内置的路由模块。反而使用AngularUI项目的 UI-Router模块来代替之。

这是因为UI-Router有两个重要的特性:
  • 多样化视图
  • 嵌入式视图
  • 传递参数 $state.go("page",{params:""})
  • 接收参数 $stateParams
安装

bower install
$ bower install angular-ui-router
npm install
$ npm install angular-ui-router
引入文件
引入angular-ui-router.jsangular-ui-router.min.js到你的index.html,必须Angualr.js核心文件之后,如下:

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js">
</script><script src="js/angular-ui-router.min.js"></script>

引入依赖
将“ui.router”依赖添加到你的主Angular.js module中。

 var myApp = angular.module('myApp', ['ui.router']);

注意:是ui.router不是ui-router,后者是许多人经常犯的错误。

UI-Router的内嵌式视图

路由状态机

UI-Router 引进了状态机设计模式,抽象高于传统的路由。路由成了状态,URL就成了状态的一个简单属性。

angular.module('APP', ['ui.router']);
 .config(['$locationProvider,$stateProvider', '$urlRouterProvider', function($locationProvider ,$stateProvider, $urlRouterProvider) {
    // 去掉感叹号!
    $locationProvider.hashPrefix('');
    $stateProvider
       .state('test', {
            url: "/test",
            templateUrl: "../../solution-test/partials/test.html",
            controller: 'testController',
          })
          .state('test.detail', {
            url: '/detail/:id',
            templateUrl: '../../solution-test/partials/detail.html',
            controller: 'detailController'
          })
          .state('test1', {
            url: "/test1",
            templateUrl: "../../solution-test/partials/test1.html",
            controller: 'test1Controller',
            params: {
              name: "",
              data: ""
            }
          })
          .state('index', {
            url: '/index',
            views: {
              "left": {
                templateUrl: "../../solution-test/partials/left.html"
              },
              "right": {
                templateUrl: "../../solution-test/partials/right.html"
              }
            }
          })
    // 默认
    $urlRouterProvider.otherwise('/');
}]);
主页视图(partials/shows.html)
<ul>
    <li ng-repeat="device in devices">
        <a ui-sref="test.detail({id: device.id})">{{device.name}}</a>
    </li>
</ul>
//  演示如何解耦合,我们只需要更改如有配置,将嵌入式页面更改为独立的两个虚拟页(一个列表路由,一个详情路由)。更具体的说,就是将shows.detail更改为detail
<div class="detail" ui-view></div>
主页视图controller(js/testController)
 angular.module('myApp.controllers', [])
    .controller('testController', function ($scope, resourceUIService, $state) {
      $scope.data = "Hello world";

      // 设备的列表
      $scope.devices = [
        {
          id: "1",
          name: "1#助燃风机"
        },
        {
          id: "2",
          name: "2#助燃风机"
        },
        {
          id: "3",
          name: "3#助燃风机"
        }
      ]
      /**
       * 跳转到一个新页面
       */
      $scope.hello = function () {
        $state.go("test1", {
          name: "test1",
          data: "001"
        });
      }
    })
显示详情视图(partials/detail.html)
<h3>{{detailData.name}}</h3>
<p>{{detailData.description}}</p>
显示详情controller(js/detailController)
 angular.module('myApp.controllers')
    .controller('detailController', function ($scope,$state,$stateParams) {
      var detailData = {
        "1":{
          name:"1#助燃风机",
          description:"气体辐射炉灶的助燃风机安装结构,包括: 外箱体,它的上侧敞开并具有内部空间,该空间至少被分隔成一个以上的空间; 陶瓷玻璃,它被结合成覆盖在所述外箱体的上端,待烹饪的食物被置于其上; 燃烧器壳体,它被结合成与所述陶瓷玻璃的下表面接触,并与所述陶瓷玻璃的该下表面一起形成排气通道; 辐射式燃烧器,它结合于所述燃烧器壳体的一侧并在燃烧气体时产生辐射波; 混合气体管,它的一端结合于所述辐射式燃烧器的一侧,另一端向下穿过形成在所述外箱体内侧的各分隔壁; 气体供给管"
        },
        "2":{
          name:"2#助燃风机",
          description:"Breaking Bad is an American crime drama television series created and produced by Vince Gilligan. The show originally aired on the AMC network for five seasons, from January 20, 2008 to September 29, 2013. The main character is Walter White (Bryan Cranston), a struggling high school chemistry teacher who"

        },
        "3":{
          name:"3#助燃风机",
          description:"The 7D is an American animated television series produced by Disney Television Animation, and broadcast on Disney XD starting in July 7, 2014. It is a re-imagining of the"
        }
      }
      $scope.detailData = detailData[$stateParams.id];
    })

UI-Router多样化视图案例

下面这个例子有多个区块在一个页面,有left,right。它们被UI-Router用多样化视图所管理。

<!DOCTYPE html>
 <html class="no-js">
    <head>
    </head>
    <body>
       <div ui-view="left"></div>
       <div ui-view="right"></div>
    </body>
</html>

像上一个例子中那样,我们使用$stateProvider配置状态(路由)。

下面的关键是注意,一个url不是一个只有一个templateUrl和controller属性了,而是使用views属性,赋予它一个各自的templateUrl和controller的集合。

.state('home',{
        url: '/',
        views: {
            'left': {
                templateUrl: '/templates/partials/left.html',
            },
            'right': {
                templateUrl: '/templates/partials/right.html',
                controller: 'RightController' 
            }
        }
    })

参考地址:https://www.jianshu.com/p/35c0acdea86c/
原文地址:http://www.funnyant.com/angularjs-ui-router/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容