requirejs按需加载angularjs文件实例


Posted in Javascript onJune 08, 2017

之前分享了一篇用ocLazyLoad实现按需加载angular js文件的博客.本来当时想会使用一种方法就行了.可最近刚好有时间,在网上查找了一下requirejs实现angular js文件按需加载的资料.方案如下:

项目的主结构如下图:

requirejs按需加载angularjs文件实例

1.index.html是最外层的页面,页面代码如下:

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <title>require angularjs</title>

</head>

<body>

<a href="#module1" rel="external nofollow" >module1</a><br/>

<a href="#module2" rel="external nofollow" >module2</a>

<div style="height: 30px;width: 100px">{{str}}</div>

<div id="container" ui-view></div>

<script data-main="main.js" src="require.js" id="main"></script>

</body>

</html>

2.页面中的script标签中,会首先引用require.js这个文件,然后再去引用main.js这个文件,main.js主要是一些关于require的config信息,代码如下:

var config = {

  baseUrl: './',      //依赖相对路径

  paths: {          //如果某个前缀的依赖不是按照baseUrl拼接这么简单,就需要在这里指出

    domReady:'domReady',

    angular: '../node_modules/angular/angular',

    app:'app',

    router:'../node_modules/angular-ui-router/release/angular-ui-router'

  },

  shim: {           //引入没有使用requirejs模块写法的类库。例如underscore这个类库,本来会有一个全局变量'_'。这里shim等于快速定义一个模块,把原来的全局变量'_'封装在局部,并导出为一个exports,变成跟普通requirejs模块一样

    'router': {

      deps: ['angular'],  //依赖什么模块

       

    },

    'angular': {

      exports: 'angular'

    }

  }

};

require.config(config);

// deps:['webapp']

require(['domReady','app','angular'],function(){

  angular.bootstrap(document, ['webapp'])//这里会去执行app.js这个文件

})

3.接下来进入app.js

/**

 * Created by Administrator on 2016/7/28.

 */

define(['router'], function () {

  var app = angular.module('webapp', ['ui.router']);

  app.config(

    function($stateProvider, $urlRouterProvider) {

      $urlRouterProvider.otherwise('module1');//如果没有指定路由,会默认访问module1

      $stateProvider.

      state('module1', {

        url:"/module1",

        // controller: 'ctr1',      //这里如果写了controller,那么在加载module1.js时,js文件里面的console.log()会运行两次

        templateUrl: 'module1/module1.html',

        resolve: {

          loadCtrl: ["$q", function($q) {

            var deferred = $q.defer();

            //异步加载controller/directive/filter/service

            require([

              'module1/module1'

            ], function() { deferred.resolve(); });

            return deferred.promise;

          }]

        }

      })

      .state("module2",{

        url:"/module2",

        // controller: 'ctr2',

        templateUrl: 'module1/module2.html',

        resolve: {

          loadCtrl: ["$q", function($q) {

            var deferred = $q.defer();

            //异步加载controller/directive/filter/service

            require([

              'module1/module2'

            ], function() { deferred.resolve(); });

            return deferred.promise;

          }]

        }

      })

    });

  app.config(function($controllerProvider,$compileProvider,$filterProvider,$provide){

    app.register = {

      //得到$controllerProvider的引用

      controller : $controllerProvider.register,

      //同样的,这里也可以保存directive/filter/service的引用

      directive: $compileProvider.directive,

      filter: $compileProvider.register,

      service: $provide.service

    };

  })

  return app;

});

4.module1.js代码如下:

define(['app'],function(app){

  app.register

    .controller('ctr1', function($scope){

      $scope.str = 'home page';

      console.log('page1')

    })

})

5.module2.js代码如下:

define(['app'],function(app){

  app.register

    .controller('ctr2',function($scope){

      $scope.str = 'local page';

      console.log('page2')

    })

})

6.module1.html代码如下:

<div ng-controller="ctr1">

这是tp1

<div id="navigator" style="width: 100%;height: 40px;line-height: 40px">

    <a href="http://www.cnblogs.com/" rel="external nofollow" >博客园首页</a>

    <a href="http://www.cnblogs.com/Ricky-Huang/" rel="external nofollow" >Ricky的首页</a>

    <a href="http://i.cnblogs.com/EditPosts.aspx?opt=1" rel="external nofollow" >新随笔</a>

    <a href="http://msg.cnblogs.com/send/Ricky_Huang" rel="external nofollow" >联系我</a>

    <a href="http://www.cnblogs.com/Ricky-Huang/rss" rel="external nofollow" >订阅他</a>

    <a href="http://i.cnblogs.com/" rel="external nofollow" >管理</a>

  </div>

</div>

7.module2.html2代码如下:

<div ng-controller="ctr2">

  这是tp2

  {{str}}

</div>

到了这一步,我们运行index.html文件,我们得到如下效果:(右图是控制台输出)

requirejs按需加载angularjs文件实例

requirejs按需加载angularjs文件实例

点击module2可以尽心正常切换,而且也可以看到js文件确实动态加载了;

注意:module1.js,module1.html,module2.js,module2.html折四个文件全部在module这个文件夹里面

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript String 对象
Apr 25 Javascript
JQuery实现鼠标移动到图片上显示边框效果
Jan 09 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
Sep 21 Javascript
每天一篇javascript学习小结(属性定义方法)
Nov 19 Javascript
JS模仿手机端九宫格登录功能实现代码
Apr 28 Javascript
Vue.js开发环境搭建
Nov 10 Javascript
javascript显示系统当前时间代码
Dec 29 Javascript
JS实现将二维数组转为json格式字符串操作示例
Jul 12 Javascript
vue中导出Excel表格的实现代码
Oct 18 Javascript
微信小程序实现动态获取元素宽高的方法分析
Dec 10 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
Aug 12 Javascript
ssm+vue前后端分离框架整合实现(附源码)
Jul 08 Javascript
简单谈谈关于 npm 5.0 的新坑
Jun 08 #Javascript
微信小程序开发之toast提示插件使用示例
Jun 08 #Javascript
jquery实现放大镜简洁代码(推荐)
Jun 08 #jQuery
原生JS发送异步数据请求
Jun 08 #Javascript
vue2 自定义动态组件所遇到的问题
Jun 08 #Javascript
vue.js中过滤器的使用教程
Jun 08 #Javascript
了解VUE的render函数的使用
Jun 08 #Javascript
You might like
安装APACHE
2007/01/15 PHP
php对二维数组按指定键值key排序示例代码
2013/11/26 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
Javascript操纵Cookie实现购物车程序
2006/11/23 Javascript
JavaScript中的property和attribute介绍
2011/12/26 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
React学习笔记之高阶组件应用
2018/06/02 Javascript
浅谈vue项目打包优化策略
2018/09/29 Javascript
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
[05:42]DOTA2英雄梦之声_第10期_蝙蝠骑士
2014/06/21 DOTA
python正则表达式判断字符串是否是全部小写示例
2013/12/25 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
python删除字符串中指定字符的方法
2018/08/13 Python
PyQt5使用QTimer实现电子时钟
2019/07/29 Python
基于Django统计博客文章阅读量
2019/10/29 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
2020/07/02 Python
基于python实现计算两组数据P值
2020/07/10 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
2020/07/23 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
Stubhub英国:购买体育、演唱会和剧院门票
2018/06/10 全球购物
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
项目管理计划书
2014/01/09 职场文书
小学家长会邀请函
2014/01/23 职场文书
网页美工求职信
2014/02/15 职场文书
银行服务明星推荐材料
2014/05/29 职场文书
个人查摆问题整改措施
2014/10/04 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
中国式结婚:司仪主持词(范文)
2019/07/25 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python