最近因为项目的比较大,需要加载的js文件较多,为了提高首屏页面的加载速度,需要对js文件进行按需加载,然后网上参考了一些资料,自己也深入研究一番之后,实现了按需加载控制器js文件及指令js文件的效果;思路如下,1、借助ui-router里面的resolve属性来实现预加载,2、需要借助$controllerProvider动态去注册控制器,$compileProvider动态去注册指令,3、需要借助$q来帮助我们实现异步加载,具体步骤如下所示;

1、在我们定义的app(在定义app.config()的js文件内)模块上挂载注册控制器和指令的属性,如下所示 

app.register = {    //注意这里的$controllerProvider是内置注册控制器的属性,$compileProvider是内置的注册指令的属性controller: $controllerProvider.register,directive: $compileProvider.directive}

2、借助$q定义一个异步加载js文件的方法(在定义路由的js文件内)

app.loadMyJs = function(js){return function($rootScope, $q){var deffer = $q.defer(),deps=[];angular.isArray(js) ? (deps = js) : deps.push(js);require(deps,function(){$rootScope.$apply(function(){deffer.resolve();});});return deffer.promise;};}

3、借助路由里面的resolve属性,进行配置需要加载的控制器文件及指令文件(在定义路由的js文件内)

.state('view1',{url: '/view1',templateUrl: 'temp/partial1.html',controller: 'MyCtrl1',resolve:{          //需要动态加载的控制器及指令js文件,其它js文件以此类推deps:app.loadMyJs(['./controllers/my-ctrl-1','./directives/loading'])}})

4、通过第一步先挂载在app上的属性来进行动态注册控制器or指令

//注册控制器(对应的控制器js文件内)app.register.controller('MyCtrl1', function ($scope,$css,$rootScope) {//控制器里面的内容
        });
//注册指令(对应的指令js文件内)

app.register.directive("loading",function (){

    return {
      restrict: "AE",
      replace: true,
      template: "<div class='mask' ng-show='isLoading'><span>loading</span></div>"
      }
    });  

如果有服务or过滤器需要按需加载也是类似的方法,另外如果是公共的服务,指令or过滤器等不需要进行按需加载的文件就可以使用普通的angular.module()的方式来定义即可;

最后这只是实现按需加载js文件中的一种思路,希望对您有所帮助。

转载于:https://www.cnblogs.com/ks-wang/p/6417692.html

angularJS+requireJS实现controller及directive的按需加载相关推荐

  1. AngularJS中的按需加载ocLazyLoad

    欢迎大家讨论与指导 : ) 初学者,有不足的地方希望各位指出 一.前言 ocLoayLoad是AngularJS的模块按需加载器.一般在小型项目里,首次加载页面就下载好所有的资源没有什么大问题.但是当 ...

  2. java模块化按需加载,JavaScript模块化之使用requireJS按需加载

    模块加载器的概念可能稍微接触过前端开发的童鞋都不会陌生,通过模块加载器可以有效的解决这些问题: JS文件的依赖关系. 通过异步加载优化script标签引起的阻塞问题 可以简单的以文件为单位将功能模块化 ...

  3. html中ng-src,angularjs – 在ng-src中使用{{}}绑定,但不会加载ng-src

    我一直在试图绑定一个值到ng-src的img HTML元素无效. AngularJS代码: app.controller('footerCtrl',function($scope,userServic ...

  4. angularjs 路由 异步加载js

    angularjs 异步加载js 有两种方法 第一种  使用$q 和 requireJS 加载 这个问题 首要出现 在 当我 把require 引入 项目中是,希望做到 点击路由时加载相应的页面htm ...

  5. AngularJS 无限滚动加载数据控件 ngInfiniteScroll

    为什么80%的码农都做不了架构师?>>>    1.什么是 InfiniteScroll?  无限滚动(Infinite Scroll)也称为自动分页.滚动分页和无限分页.常用在图片 ...

  6. requirejs加载顺序_前端模块化之AMD — Requirejs的使用

    前言 随着Ajax技术的兴起,前后端分离的开发模式逐渐占领了几乎整个市场,现在的服务器带宽也足够完成大量数据交互,于是很多以前在服务器端的逻辑也可以移植到前端来处理了,从而减轻服务器的压力,当然,这样 ...

  7. html清除require报错,javascript - requirejs加载报错问题?

    1.使用requirejs写了个demo.html,第一次加载页面时能够正常显示,随后刷新页面就开始报错,虽然页面还是正常显示,但是我不理解为什么会这样. 2.我的另一个999.html文件(跟dem ...

  8. 从 RequireJs 源码剖析脚本加载原理

    引言 俗话说的好,不喜欢研究原理的程序员不是好的程序员,不喜欢读源码的程序员不是好的 jser.这两天看到了有关前端模块化的问题,才发现 JavaScript 社区为了前端工程化真是煞费苦心.今天研究 ...

  9. 【开源】分享一个前后端分离方案-前端angularjs+requirejs+dhtmlx 后端asp.net webapi

    一.前言 半年前左右折腾了一个前后端分离的架子,这几天才想起来翻出来分享给大家.关于前后端分离这个话题大家也谈了很久了,希望我这个实践能对大家有点点帮助,演示和源码都贴在后面. 二.技术架构 这两年a ...

最新文章

  1. git review devops过程
  2. python环境设置_CentOS 7.2环境搭建实录(第四章:python环境配置)
  3. MIT新研究:过去80年,算法效率提升到底有多快?
  4. 查看mysql的启动日志目录下_mysql诊断启动问题、查看日志文件详解
  5. SpringCloud入门(一)
  6. sqlserver把小数点后面多余的0去掉
  7. selenium windows 下面环境搭建(安装JDK)
  8. servlet 返回可访问文件_Servlet第二篇「Servlet细节、ServletConfig、ServletContext」
  9. 推特安卓版漏洞可导致攻击者访问用户私信
  10. 金刚爸爸是这么教育金刚儿子的
  11. Maven简明教程(3)---在eclipse中创建工程与基本命令介绍
  12. 第四课 SCCM2012功能SCUP为操作系统分发更新补丁
  13. “九”答不可 | 量子计算会“带来革命性改变”吗?
  14. 李雅普诺夫(第二方法)稳定性分析+例题
  15. @async 注解使主线程不等待
  16. MMI笔记 virtual environments, audio for virtual environments 知识点总结
  17. 某机主存容量为4Nx16位,且存储字长等于指令字长,若该机指令系统可完成108种操作,操作码位数固定,且具有直接、间接、变址、基址、相对、立即等六种寻址方式
  18. 机器学习系列(一), 监督学习和无监督学习
  19. 联通查询套餐及名下联通卡
  20. python抓取朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)...

热门文章

  1. C#基础加强_泛型的基本原理
  2. 1515 跳 - Wikioi
  3. centos7安装oracle12c 二
  4. 前复权后复权程序C# .net
  5. Windows10电脑系统时间校准
  6. java实现无序数组结构
  7. 再利用Chakra引擎绕过CFG
  8. 【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络AlexNet
  9. Asix下日志包冲突
  10. [转帖]鲍鹏山:我们培养了很多高学历的野蛮人