angularJs中ui-router的使用

  学习使用angular中,ui-route是其中的一个难点,简单使用没什么问题,但涉及到多级嵌套,就感受有茫然,查了不少资料,踩过不少坑,到目前为止也不能说对ui-route有全面了解;这里只是把填补的几个坑记录一下备忘:php

1.abstract的使用:html

 1 $stateProvider
 2     .state('shop',{
 3         resolve:{
 4             "shoplist":function($http){
 5                 return $http({
 6                     url:"/bookApp/data/shoplist.php",
 7                     method:"GET"
 8                 })
 9             }
10         },
11         abstract: true,
12         url:"/shop",
13         templateUrl:"templates/shop/list.html",
14         controller:"ShopListController"
15 })

使用abstract属性有什么用,官方说明:abstract: true 代表此状态不能被显性激活,只能被子状态隐性激活。不能显性激活即不能直接经过"/shop"访问此状态路由,那不就是一条死路吗?那要你何用。等等,咱们再看看后面一句:能被子状态隐性激活,貌似还能活起来,怎么让他活起来?咱们再看下面的代码:缓存

1     .state('shop.main',{
2         url:"/:id",
3         abstract: true,
4         templateUrl:"templates/shop/main2.html",
5         controller:"ShopMainController"    
6     })

状态:"shop.main"是shop的子状态,按理论shop.main能够激活shop,咱们只须要这样去访问:/shop/1,这样咱们能够激活shop状态,和"shop.main"ide

咱们暂且不着急,我再再给加上abstract属性,玩点刺激的,咱们再把激活点再日后一级看下面代码:学习

    .state('shop.main.info',{
        url:"",
        templateUrl:"templates/shop/info.html",
        cache:'false',
        controller:"InfoController"
    })
    .state('shop.main.author',{
        url:"/author",
        template:"<div>authorauthorauthorauthorauthor</div>"
    })
    .state('shop.main.samebook',{
        url:"samebook",
        template:"<div>samebooksamebooksamebooksamebooksamebooksamebook</div>"
    })

我看状态"shop.main.info"这个状态 的url为""因此咱们要激活这个状态只须要这样去访问"shop/1"全部能够作为"shop.main"的一个默认子状态。ui

此时模块的嵌套关系为:list.html嵌套main.html,main.html嵌套info.html。咱们能够经过"shop/:id"的url激活这个三层嵌套。咱们看下最终的展现效果:url

不错,达到我预期的效果。spa

2控制器中参数的使用:调试

这个没什么难点,在控制器中注入"$stateParams" url参数在这个对象里能够拿获得 :code

shop.controller("ShopMainController",['$scope','$stateParams','$rootScope',function($scope,$stateParams,$rootScope){
    $scope.persons = [1,2,3,4,5,6];
    $scope.good = {
        id:$stateParams.id
    }
    cfpLoadingBar.start();

}]);

3.怎么防止模板缓存

在开发过程当中,模板缓存严重影响咱们调试,有时候代码修改了,模板却没有任何变化。很苦恼,其余咱们只须要监听下stateChangeSuccess,而后再清除$templateCache就行,这里咱们采用run方法添加监听:

bookApp.run(['$rootScope','$templateCache', function ($rootScope, $templateCache) {  

  var stateChangeSuccess = $rootScope.$on('$stateChangeSuccess', stateChangeSuccess);  

  function stateChangeSuccess($rootScope) {  
   $templateCache.removeAll();    
 } 
}]);
相关文章
相关标签/搜索