GVKun编程网logo

AngularJS动态加载模块和依赖的方法分析(angular 动态加载模块)

10

如果您对AngularJS动态加载模块和依赖的方法分析和angular动态加载模块感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解AngularJS动态加载模块和依赖的方法分析的各种细节,并对a

如果您对AngularJS动态加载模块和依赖的方法分析angular 动态加载模块感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解AngularJS动态加载模块和依赖的方法分析的各种细节,并对angular 动态加载模块进行深入的分析,此外还有关于Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖、Angular2动态加载模板、angularjs – Angular Bootstrap后加载模块、angularjs – ocLazyload没有加载模块的实用技巧。

本文目录一览:

AngularJS动态加载模块和依赖的方法分析(angular 动态加载模块)

AngularJS动态加载模块和依赖的方法分析(angular 动态加载模块)

本文实例讲述了AngularJS动态加载模块和依赖的方法。分享给大家供大家参考,具体如下:

前言

由于AngularJS是单页面应用框架,在正常的情况下,会在访问页面的时候将所有的CSS、JavaScript文件都加载进来。文件不多的时候,页面启动速度倒不会影响太多。但是一旦文件数太多或者加载的第三方库比较大的时候,就会影响页面启动速度。因此对于应用规模大、文件数比较多或者加载的第三方库比较大的时候,采用动态加载JS或者动态加载模块会极大提升页面的启动速度。本文将介绍如何利用ocLazyLoad实现动态加载。

准备

AngularJS动态加载依赖第三方库:ocLazyLoad。ocLazyLoad是一个第三方库,支持AngularJS动态加载module、service、directive以及静态文件。

安装ocLazyLoad

可通过npm或者bower进行安装

npm install oclazyload
bower install oclazyload

将ocLazyLoad module 添加到你的应用中

angular.module(''myApp'',[''oc.lazyLoad'']);

配置 ocLazyLoad

你可以在 config函数中配置 $ocLazyLoadProvider,配置文件如下

.config([''$ocLazyLoadProvider'', function($ocLazyLoadProvider){
  $ocLazyLoadProvider.config({
    debug: true,
    events: true,
    modules: [
      {
        name: ''TestModule'',
        files: [''test.js'']
      }
    ]
  })
}])

debug: 用来开启debug模式。布尔值,默认是false。当开启debug模式时,$ocLazyLoad会打印出所有的错误到console控制台上。
events:当你动态加载了module的时候,$ocLazyLoad会广播相应的事件。布尔值,默认为false。
modules:用于定义你需要动态加载的模块。定义每个模块的名字需要唯一。
modules必须要用数组的形式,其中files也必须以数组的形式存在,哪怕只需要加载一个文件

在路由当中加载module

.config([''$routeProvider'', function($routeProvider) {
    $routeProvider.otherwise(''/index'');
    $routeProvider.when(''/index'', {
      templateUrl: ''index.html'',
      controller: ''IndexController'',
      resolve: { // resolve 里的属性如果返回的是 promise对象,那么resolve将会在view加载之前执行
        loadMyCtrl: [''$ocLazyLoad'', function($ocLazyLoad) {
          // 在这里可以延迟加载任何文件或者刚才预定义的modules
          return $ocLazyLoad.load(''TestModule''); //加载刚才定义的TestModule
          /*return $ocLazyLoad.load([  // 如果要加载多个module,需要写成数组的形式
            ''TestModule'',
            ''MainModule''
            ]);*/
        }]
      }
    })
}])

resolve设置的属性可以被注入到Controller当中。如果resolve返回的是promise对象的话,那么它们将在控制器加载以及$routeChangeSuccess被触发之前执行。

$ocLazyLoad就是利用这个原理hack,进行动态加载。

resolve的值可以是:

* key,the value of key 是会被注入到Controller的依赖的名字;
* factory,即可以是一个service的名字,也可以是一个返回值,它是会被注入到控制器中的函数或可以被resolve的promise对象。

通过这样的配置,就可以实现了AngularJS动态加载模块和依赖。但是ocLazyLoad提供的功能更加丰富,不止动态加载模块和依赖,还能动态加载service,diretive等。更多的功能,可以访问[ocLazyLoad官网](https://oclazyload.readme.io)

希望本文所述对大家AngularJS程序设计有所帮助。

您可能感兴趣的文章:
  • AngularJs动态加载模块和依赖注入详解
  • AngularJs 动态加载模块和依赖
  • 详解Angular 4.x 动态创建组件
  • angular 动态组件类型详解(四种组件类型)
  • Angular.js实现动态加载组件详解

Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖

Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖

什么是ui-router

  ui-router是AngularUI库最有用的组件之一(AngularUI库由AngularJS社区构建)。它是一个第三方路由框架,允许通过状态机制组织接口,而不是简单的URL路由。

 什么是ocLoayLoad

  ocLoayLoad是AngularJS的模块按需加载器。按需加载的对象

   简单说就是哪个页面需要什么资源,在加载哪个页面的时候在加载,而不是把所有的资源放在模板里。

 三个主要文件

<script src="angular/1.4.8/angular/angular.min.js"></script>
<script src="angular/ui-router/release/angular-ui-router.min.js"></script>
<script src="angular/oclazyload/src/ocLazyLoad.min.js"></script>

推荐

  1:首先下载插件 可以百度搜索,这里我推荐在线测试的 https://www.bootcdn.cn/angular-ui-router/

  2:github url :https://github.com/366065186/angularjs-oclazyload

    3:Angularjs https://code.angularjs.org/

html文件(部分代码)简单说明

1:首先页面引入上面三个文件

2:在a标签中写入 ui-sref=''链接路径'' 标签

2:在页面定义一块区域用于显示链接内容 <ui-view></ui-view>

 js代码:

首先在module中注入

''ui.router'', ''oc.lazyLoad''然后在通过config进行路由配置。

(function () {
 var app = angular.module("app", [''ui.router'', ''oc.lazyLoad'']) 
 
 // 配置路由
 app.config(function ($stateProvider) {
  $stateProvider
  // 个人中心主页
   .state(''admin/index'', {
    url: ''/admin/index'',
    templateUrl: "/admin/index",
    // 加载页面需要的js
    resolve: load([''/static/js/transfer/adminlte/index.js''])
   })
   // 分类管理列表
   .state(''class/index'', {
    url: ''/class/index'',
    templateUrl: "/class/index",
    resolve: load([
     ''/static/js/transfer/adminlte/classification/index.js''
    ])
   })
   // 轮播图列表
   .state(''roll'', {
    url: ''/roll'',
    templateUrl: "/roll",
    resolve: load([
     ''/static/js/transfer/adminlte/broadcat.js''
    ])
   })
   // 验证码列表
   .state(''code'', {
    url: ''/code'',
    templateUrl: "/code",
    resolve: load([
     ''/static/js/transfer/adminlte/code.js''
    ])
   })
   // 电影列表
   .state(''movie'', {
    url: ''/movie'',
    templateUrl: "/movie",
    resolve: load([
     ''/static/js/transfer/adminlte/movie/movie.js''
    ])
   })
   // 电影编辑
   .state(''movie/edit'', {
    url: ''/movie/edit'',
    templateUrl: "/movie/edit",
    resolve: load([
     ''/static/js/transfer/adminlte/movie/movieedit.js''
    ])
   })
 });

 // 在加载该模块的时候调用$state.go(''admin/index'');,以激活admin/index状态。
 app.run(function ($state) {
  $state.go(''admin/index'');
 });
/*
   * 通过$ocLazyLoad加载页面对应的所需的JS数据
   * 通过$q异步加载JS文件数据其中使用的是promise【保护模式】
  */
function load(srcs, callback) {
 return {
  deps: [
   ''$ocLazyLoad'', ''$q'',
   function ($ocLazyLoad, $q) {
    var deferred = $q.defer();
    var promise = false;
    srcs = angular.isArray(srcs) ? srcs : srcs.split(/\s+/);
    if (!promise) {
     promise = deferred.promise;
    }
    angular.forEach(srcs,
     function (src) {
      promise = promise.then(function () {
       angular.forEach([],
        function (module) {
         if (module.name === src) {
          src = module.module ? module.name : module.files;
         }
        });
       return $ocLazyLoad.load(src);
      });
     });
    deferred.resolve();
    return callback ? promise.then(function () {
     return callback();
    }) : promise;
   }
  ]
 };
}
})();

AngularJS路由设置对象参数规则:

属性 类型 描述
template string   在ng-view中插入简单的html内容
templateUrl string 在ng-view中插入html模版文件
controller string,function / array 在当前模版上执行的controller函数
controllerAs string 为controller指定别名
redirectTo string,function 重定向的地址
resolve object 指定当前controller所依赖的其他模块

 效果图:

总结

以上所述是小编给大家介绍的Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

您可能感兴趣的文章:
  • angular之ng-template模板加载
  • 浅谈Angular2 模块懒加载的方法
  • 详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
  • angularJS+requireJS实现controller及directive的按需加载示例
  • 详解angular2采用自定义指令(Directive)方式加载jquery插件
  • angular+ionic 的app上拉加载更新数据实现方法
  • AngularJS中的按需加载ocLazyLoad示例

Angular2动态加载模板

Angular2动态加载模板

我开始研究使用Angular2和我遇到的一个我无法找到解决方案的问题.我要求根据我从模型中收到的数据,我希望为给定的组件加载不同的模板.这主要与根据我收到的数据维护不同的布局有关.这可能吗?

谢谢

解决方法

Angular 2支持UI构建的组件组合方法.因此,你不应该最终得到大型模板,如果是这样的话,最好将它们分成一些辅助子组件(即使它们只提供布局).

如果模板不是很大,您可以使用* ngIf指令基于某个组件的属性进行有条件渲染.

解决此问题的另一种方法是在组件级别实现路由,然后在使用router.navigate([‘./ MySubcomponent’])收到数据后以编程方式路由到这些路由

angularjs – Angular Bootstrap后加载模块

angularjs – Angular Bootstrap后加载模块

我试图在app bootstrap之后加载并注入一个模块.例如,假设我的初始模块是:

angular.module('mainApp',[]);

后来我意识到用户需要通过secondaryApp提供的所有路由才能打开它们.所以现在我需要我的模块看起来像这样:

angular.module('mainApp',['secondaryApp']);

我成功地lazyLoading secondaryApp js文件,但我无法将其添加到mainApp.我试过将它添加到requires数组,即

var app = angular.module('mainApp');
app.requires[app.requires.length] = 'secondaryApp';

这会将模块名称添加到requires数组,但mainApp仍然无法访问secondaryApp中提供的路由/状态.

有没有人有什么建议?我已经被困在这一段了一段时间了.

谢谢!

解决方法

为了清楚起见,你不能定义angular.module(‘mainApp’,[]);不止一次.

每次声明具有依赖关系的模块时,它都会覆盖先前的声明.

angularjs – ocLazyload没有加载模块

angularjs – ocLazyload没有加载模块

在 HTML中我在app.js之前加载oclazyload –

<!-- inject:js -->
        <script src="/packages/libs/jquery/dist/jquery.js"></script>
        <script src="/packages/libs/angular/angular.js"></script>
        <script src="/packages/libs/oclazyload/dist/ocLazyLoad.js"></script>
        <script src="/packages/libs/angular-ui-router/release/angular-ui-router.js"></script>
        <!-- endinject -->

        <script src="app/app.js" ></script>
        <script src="app/common/app.config.js" charset="utf-8"></script>

我的app.js –

(function () {
    angular.module('app',['ui.router','oc.lazyload']);

    angular.element(document).ready(function () {
        angular.bootstrap(document,["app"]);
    });
})();

但由于某种原因,它根本不加载oc.lazyload模块.可能是什么问题?我错过了什么吗?

Uncaught Error: [$injector:modulerr] Failed to instantiate module app due to:
Error: [$injector:modulerr] Failed to instantiate module oc.lazyload due to:
Error: [$injector:nomod] Module 'oc.lazyload' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.

解决方法

有一个错字.模块名称是驼峰式的.更改

'oc.lazyload'

'oc.lazyLoad' //'L' capitalized

关于AngularJS动态加载模块和依赖的方法分析angular 动态加载模块的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖、Angular2动态加载模板、angularjs – Angular Bootstrap后加载模块、angularjs – ocLazyload没有加载模块的相关知识,请在本站寻找。

本文标签: