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 相关文章推荐
js arguments对象应用介绍
Nov 28 Javascript
Jquery的hover方法让鼠标经过li时背景变色
Sep 06 Javascript
使用jquery解析XML的方法
Sep 05 Javascript
JavaScript中的类(Class)详细介绍
Dec 30 Javascript
推荐一款jQuery插件模板
Jan 09 Javascript
javascript正则表达式中的replace方法详解
Apr 20 Javascript
BooStrap对导航条的改造实践小结
Sep 21 Javascript
详解AngularJS脏检查机制及$timeout的妙用
Jun 19 Javascript
vue开发调试神器vue-devtools使用详解
Jul 13 Javascript
js链表操作(实例讲解)
Aug 29 Javascript
vue+eslint+vscode配置教程
Aug 09 Javascript
VUE项目初建和常见问题总结
Sep 12 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
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
PHP中常用的输出函数总结
2014/09/22 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
2017/06/27 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
web 页面分页打印的实现
2009/06/22 Javascript
斜45度寻路实现函数
2009/08/20 Javascript
var与Javascript变量隐式声明
2009/09/17 Javascript
jquery中对表单的基本操作代码
2010/07/29 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
nodejs中request库使用HTTPS代理的方法
2019/04/30 NodeJs
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
Python中顺序表的实现简单代码分享
2018/01/09 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
解决python运行效率不高的问题
2020/07/20 Python
Python爬取梨视频的示例
2021/01/29 Python
英国领先的葡萄酒专家:Majestic Wine
2017/05/30 全球购物
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
餐饮业创业计划书范文
2014/01/06 职场文书
校长先进事迹材料
2014/02/01 职场文书
员工生日会策划方案
2014/06/14 职场文书
文明城市标语
2014/06/16 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
Mysql将字符串按照指定字符分割的正确方法
2022/05/30 MySQL