angularJS+requireJS实现controller及directive的按需加载示例


Posted in Javascript onFebruary 20, 2017

最近因为项目的比较大,需要加载的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文件中的一种思路,以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
前端开发的开始---基于面向对象的Ajax类
Sep 17 Javascript
JavaScript中链式调用之研习
Apr 07 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
Apr 26 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
Aug 08 Javascript
详谈JavaScript内存泄漏
Nov 14 Javascript
jQuery中offsetParent()方法用法实例
Jan 19 Javascript
3种js实现string的substring方法
Nov 09 Javascript
angularjs实现文字上下无缝滚动特效代码
Sep 04 Javascript
webpack下实现动态引入文件方法
Feb 22 Javascript
详解Node.js读写中文内容文件操作
Oct 10 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
Apr 29 Javascript
JavaScript如何利用Promise控制并发请求个数
May 14 Javascript
浅谈js函数三种定义方式 &amp; 四种调用方式 &amp; 调用顺序
Feb 19 #Javascript
js 输入框 正则表达式(菜鸟必看教程)
Feb 19 #Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
Feb 19 #Javascript
基于Angular.js实现的触摸滑动动画实例代码
Feb 19 #Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
Feb 19 #Javascript
jQuery实现一个简单的轮播图
Feb 19 #Javascript
js 博客内容进度插件详解
Feb 19 #Javascript
You might like
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
Laravel 5框架学习之向视图传送数据
2015/04/08 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
JS启动应用程序的一个简单例子
2008/05/11 Javascript
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
jquery用get实现ajax在ie里面刷新不进入后台解决方法
2013/08/12 Javascript
jQuery获取和设置表单元素的方法
2014/02/14 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
python语言元素知识点详解
2019/05/15 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
python实现实时视频流播放代码实例
2020/01/11 Python
python isinstance函数用法详解
2020/02/13 Python
Python如何对XML 解析
2020/06/28 Python
利用python 读写csv文件
2020/09/10 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
关于css兼容性问题及一些常见问题汇总
2016/05/03 HTML / CSS
Shopee越南:东南亚与台湾电商平台
2019/02/03 全球购物
德国50岁以上交友网站:Lebensfreunde
2020/03/18 全球购物
介绍一下write命令
2014/08/10 面试题
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
学生发电厂实习自我鉴定
2013/09/22 职场文书
小学教师办公室制度
2014/02/03 职场文书
初三学习决心书
2014/03/11 职场文书
详解Java实践之抽象工厂模式
2021/06/18 Java/Android