zoukankan      html  css  js  c++  java
  • 对angular实现延迟加载template和controller

    1、在lib目录中添加 script.js 文件,并在index.html其他<script>之前引用之:

    <script src="lib/script.js"></script>
    
     
    2、在app.js中增加全局函数LazyLoadTemplate()和LazyLoadJs():
    function LazyLoadTemplate(file) {
    return function () {
    return file;
    }
    }

    function LazyLoadJs(file) {
    return {
    deps: function ($q, $rootScope) {
    var d = $q.defer();
    $script(file, function () {
    $rootScope.$apply(function () {
    d.resolve();
    })
    });
    return d.promise;
    }
    }
    }
    3、在app.config()函数中开始处增加:
    var app = angular.module("app");
    app.controllerProvider = $controllerProvider; // 主要是这个
    app.compileProvider = $compileProvider; // 以下这两个备用
    app.filterProvider = $filterProvider;
    注意,要在config()的参数列表中增加相应的$controllerProvider$compileProvider 和 $filterProvider
     
    4、在路由表中修改需要动态加载的状态路由配置,例如:
    $stateProvider.state('page1', {
    url: '/page1',
    templateUrl: LazyLoadTemplate('page1.html'),
    controller: 'Page1Ctrl',
    resolve: LazyLoadJs("page1.js")
    });
    提示:
    (1) 把 templateUrl属性的值改为调用函数 LazyLoadTemplate()。
    (2) 增加 resolve属性,其值为调用函数LazyLoadJs()。
     
    5、在控制器所在JS文件中,修改控制器的定义方式:
    angular.module('app').controllerProvider.register("Page1Ctrl", function ($scope) {
    $scope.title = "Page1";
    });
    提示:把原来的 controller() 函数调用改成  controllerProvider.register()。
     
    6、从index.html中去掉对该控制器所在JS文件的引用,例如:
    <!--<script src="page1.js"></script>-->
     
     
    参考:
     
  • 相关阅读:
    事务
    handler
    codeforces 27E Number With The Given Amount Of Divisors
    暑期实践日志(五)
    暑期实践日志(四)
    暑期实践日志(三)
    暑期实践日志(二)
    暑期实践日志(一)
    数论 UVALive 2756
    数论 UVALive 2911
  • 原文地址:https://www.cnblogs.com/xxfcz/p/5395917.html
Copyright © 2011-2022 走看看