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 相关文章推荐
jquery学习笔记二 实现可编辑的表格
Apr 09 Javascript
html中table数据排序的js代码
Aug 09 Javascript
img onload事件绑定各浏览器均可执行
Dec 19 Javascript
ie6下png图片背景不透明的解决办法使用js实现
Jan 11 Javascript
jQuery focus和blur事件的应用详解
Jan 26 Javascript
JS的参数传递示例介绍
Feb 08 Javascript
vue.js学习之UI组件开发教程
Jul 03 Javascript
React Native日期时间选择组件的示例代码
Apr 27 Javascript
vue axios数据请求及vue中使用axios的方法
Sep 10 Javascript
vscode 开发Vue项目的方法步骤
Nov 25 Javascript
Vue自定义指令写法与个人理解
Feb 09 Javascript
js实现跟随鼠标移动的小球
Aug 26 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
Ping服务的php实现方法,让网站快速被收录
2012/02/04 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
php防止恶意刷新与刷票的方法
2014/11/21 PHP
PHP微信发送推送消息乱码的解决方法
2019/02/28 PHP
javascript jQuery插件练习
2008/12/24 Javascript
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
jquery实现多条件筛选特效代码分享
2015/08/28 Javascript
JS实现消息来时让网页标题闪动效果的方法
2016/04/20 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
webpack打包单页面如何引用的js
2017/06/07 Javascript
JQueryMiniUI按照时间进行查询的实现方法
2017/06/07 jQuery
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
2017/10/19 Javascript
详解RequireJs官方使用教程
2017/10/31 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
Python中的exec、eval使用实例
2014/09/23 Python
Python使用Redis实现作业调度系统(超简单)
2016/03/22 Python
python编程实现希尔排序
2017/04/13 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
windows下python安装pip图文教程
2018/05/25 Python
Python交互环境下打印和输入函数的实例内容
2020/02/16 Python
python 基于opencv去除图片阴影
2021/01/26 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
Notino法国:购买香水和化妆品
2019/04/15 全球购物
武汉高蓝德国际.net机试
2016/06/24 面试题
岗位职责的含义
2013/11/17 职场文书
自荐信格式简述
2014/01/25 职场文书
护士在校生自荐信
2014/02/01 职场文书
放飞梦想演讲稿600字
2014/08/26 职场文书
个人诉讼委托书范本
2014/10/17 职场文书
送达通知书
2015/04/25 职场文书
小英雄雨来观后感
2015/06/09 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js