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左侧三级菜单导航实例代码
Sep 13 Javascript
iframe里的页面禁止右键事件的方法
Jun 10 Javascript
JavaScript获得表单target属性的方法
Apr 02 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
Dec 20 Javascript
基于javascript实现表格的简单操作
May 21 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
Sep 17 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
Oct 10 Javascript
Javascrip实现文字跳动特效
Nov 27 Javascript
JS碰撞运动实现方法详解
Dec 15 Javascript
Vue组件通信实践记录(推荐)
Aug 15 Javascript
基于Vuex无法观察到值变化的解决方法
Mar 01 Javascript
vue兄弟组件传递数据的实例
Sep 06 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中的日期处理方法集锦
2007/01/02 PHP
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
深入分析php之面向对象
2013/05/15 PHP
基于PHP CURL用法的深入分析
2013/06/09 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
javascript学习网址备忘
2007/05/29 Javascript
js 单引号 传递方法
2009/06/22 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
jQuery基于扩展实现的倒计时效果
2016/05/14 Javascript
jquery pagination分页插件使用详解(后台struts2)
2017/01/22 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
微信小程序wx:for循环的实例详解
2018/10/07 Javascript
git进行版本控制心得详谈
2017/12/10 Python
Python中eval带来的潜在风险代码分析
2017/12/11 Python
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
python 将md5转为16字节的方法
2018/05/29 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
使用Python OpenCV为CNN增加图像样本的实现
2019/06/10 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
Python网页解析器使用实例详解
2020/05/30 Python
python字符串的index和find的区别详解
2020/06/20 Python
如何使用python记录室友的抖音在线时间
2020/06/29 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
学生实习自我鉴定
2013/10/11 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
2015年企业新年寄语
2014/12/08 职场文书
业务内勤岗位职责
2015/04/13 职场文书
《风筝》教学反思
2016/02/23 职场文书
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL