zoukankan      html  css  js  c++  java
  • angularJs中ui-router的使用

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

    1.abstract的使用:

     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"

    我们暂且不着急,我再再给加上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"的一个默认子状态。

    此时模块的嵌套关系为:list.html嵌套main.html,main.html嵌套info.html。我们可以通过"shop/:id"的url激活这个三层嵌套。我们看下最终的展示效果:

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

    2控制器中参数的使用:

    这个没什么难点,在控制器中注入"$stateParams" url参数在这个对象里可以拿得到 :

    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();    
     } 
    }]);
  • 相关阅读:
    白书数据结构基础总结
    UVA 10557 XYZZY 结题报告
    UVA 10047 The Monocycle 解题报告
    二叉查找树及其C语言实现
    堆排序及其c语言实现
    约瑟夫环问题小结
    KMP算法总结
    UVA 10129 Play on Words 解题报告
    深入浅出Node.js (8)
    洛谷 P1757 通天之分组背包
  • 原文地址:https://www.cnblogs.com/jqy518/p/5491908.html
Copyright © 2011-2022 走看看