zoukankan      html  css  js  c++  java
  • angularjs 1.x lazyloading

    https://oclazyload.readme.io/docs

    1. 安装好后直接使用
    var myApp = angular.module("MyApp", ["oc.lazyLoad"]);
    
    1. 用来加载模块
    myApp.controller("MyCtrl", function($ocLazyLoad) {
      $ocLazyLoad.load('testModule.js');
    });
    
    1. 加载组件
      如果组件在独立的模块中就和模块差不多, 否则将要加载的组件应该是属于已定义好的模块

    2. live examples
      查看examples来了解更多的用法

    在路由中的应用

    $ocLazyLoad works well with routers and especially ui-router. Since it returns a promise, use the resolve property to make sure that your components are loaded before the view is resolved:

    $stateProvider.state('index', {
      url: "/", // root route
      views: {
        "lazyLoadView": {
          controller: 'AppCtrl', // This view will use AppCtrl loaded below in the resolve
          templateUrl: 'partials/main.html'
        }
      },
      resolve: { // Any property in resolve should return a promise and is executed before the view is loaded
        loadMyCtrl: ['$ocLazyLoad', function($ocLazyLoad) {
          // you can lazy load files for an existing module
                 return $ocLazyLoad.load('js/AppCtrl.js');
        }]
      }
    });
    

    If you have nested views, make sure to include the resolve from the parent to load your components in the right order:

    $stateProvider.state('parent', {
      url: "/",
      resolve: {
        loadMyService: ['$ocLazyLoad', function($ocLazyLoad) {
                 return $ocLazyLoad.load('js/ServiceTest.js');
        }]
      }
    })
    .state('parent.child', {
        resolve: {
            test: ['loadMyService', '$ServiceTest', function(loadMyService, $ServiceTest) {
                // you can use your service
                $ServiceTest.doSomething();
            }]
        }
    });
    

    It also works for sibling resolves:

    $stateProvider.state('index', {
      url: "/",
      resolve: {
        loadMyService: ['$ocLazyLoad', function($ocLazyLoad) {
                 return $ocLazyLoad.load('js/ServiceTest.js');
        }],
            test: ['loadMyService', '$serviceTest', function(loadMyService, $serviceTest) {
                // you can use your service
                $serviceTest.doSomething();
            }]
        }
    });
    

    Of course, if you want to use the loaded files immediately, you don't need to define two resolves, you can also use the injector (it works anywhere, not just in the router):

    $stateProvider.state('index', {
      url: "/",
      resolve: {
        loadMyService: ['$ocLazyLoad', '$injector', function($ocLazyLoad, $injector) {
          return $ocLazyLoad.load('js/ServiceTest.js').then(function() {
            var $serviceTest = $injector.get("$serviceTest");
            $serviceTest.doSomething();
          });
        }]
      }
    });
    
  • 相关阅读:
    c语言中的rewind函数,Win CE 不支持,可用fseek函数替换
    接口隔离原则(转)
    接口设计的 11 种原则 (转)
    设计模式六大原则/接口设计六大原则 之 组合/聚集复用原则(转)
    C++ 求幂的运算符是什么?
    设计模式六大原则/接口设计六大原则 之 迪米特法则(转)
    解决mysql出现“the table is full”的问题
    tomcat远程调试设置
    这些习惯很伤肾 要警觉
    从ie临时文件夹一次复制多个文件
  • 原文地址:https://www.cnblogs.com/wancy86/p/7581144.html
Copyright © 2011-2022 走看看