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 相关文章推荐
jquery实现按Enter键触发事件示例
Sep 10 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
Feb 14 Javascript
jQuery选择器及jquery案例详解(必看)
May 20 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
Aug 05 Javascript
js获取地址栏参数的两种方法
Jun 27 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
Sep 20 Javascript
Three.JS实现三维场景
Dec 30 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
May 20 Javascript
layui 富文本编辑器和textarea值的相互传递方法
Sep 18 Javascript
vue动态禁用控件绑定disable的例子
Oct 28 Javascript
JQuery中的常用事件、对象属性与使用方法分析
Dec 23 jQuery
Javascript使用integrity属性进行安全验证
Nov 07 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中对数据库操作的封装
2006/10/09 PHP
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
JS获取表格内指定单元格html内容的方法
2015/03/31 Javascript
js获取微信版本号的方法
2015/05/12 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
Python SQLite3数据库操作类分享
2014/06/10 Python
Python urls.py的三种配置写法实例详解
2017/04/28 Python
Python根据文件名批量转移图片的方法
2018/10/21 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
PyCharm GUI界面开发和exe文件生成的实现
2020/03/04 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
Python利用Xpath选择器爬取京东网商品信息
2020/06/01 Python
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
会计毕业生自我鉴定
2013/11/04 职场文书
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
艺人经纪人岗位职责
2014/04/15 职场文书
文明市民先进事迹
2014/05/15 职场文书
二手房购房协议书范本
2014/10/05 职场文书
2015年秋季小班开学寄语
2015/05/27 职场文书
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis