• Angular JS + Require JS 实现按需加载


    先看下目录结构,为了方便配置将所有文件放在同一文件夹下,实际使用过程中建议归类文件:

    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; 100px">{{str}}</div>
     
    <div id="container" ui-view></div>
     
    <script data-main="main.js" src="require.js" id="main"></script>
     
    </body>
     
    </html> 

    2.main.js

    var config = {
     
      baseUrl: './',      //依赖相对路径
     
      paths: {          //如果某个前缀的依赖不是按照baseUrl拼接这么简单,就需要在这里指出
     
     
        angular: 'angular',
     
        app:'app',
     
        router:'angular-ui-router'
     
      },
     
      shim: {           //引入没有使用requirejs模块写法的类库。例如underscore这个类库,本来会有一个全局变量'_'。这里shim等于快速定义一个模块,把原来的全局变量'_'封装在局部,并导出为一个exports,变成跟普通requirejs模块一样
     
        'router': {
     
          deps: ['angular'],  //依赖什么模块
     
            
     
        },
     
        'angular': {
     
          exports: 'angular'
     
        }
     
      }
     
    };
     
    require.config(config);
     
    // deps:['webapp']
     
    require(['app','angular'],function(){
     
      angular.bootstrap(document, ['webapp'])//这里会去执行app.js这个文件
     
    }) 

    3.app.js

    define(['router'], function () {
     
      var app = angular.module('webapp', ['ui.router']);
     
      app.config(
     
        function($stateProvider, $urlRouterProvider) {
     
          $urlRouterProvider.otherwise('module1');
     
          $stateProvider.
     
          state('module1', {
     
            url:"/module1",
     
            // controller: 'ctr1',     
     
            templateUrl: './module1.html',
     
            resolve: {
     
              loadCtrl: ["$q", function($q) {
     
                var deferred = $q.defer();
    
     
                require([
     
                  './module1'
     
                ], function() { deferred.resolve(); });
     
                return deferred.promise;
     
              }]
     
            }
     
          })
     
          .state("module2",{
     
            url:"/module2",
     
            // controller: 'ctr2',
     
            templateUrl: './module2.html',
     
            resolve: {
     
              loadCtrl: ["$q", function($q) {
     
                var deferred = $q.defer();
     
             
                require([
     
                  './module2'
     
                ], function() { deferred.resolve(); });
     
                return deferred.promise;
     
              }]
     
            }
     
          })
     
        });
     
      app.config(function($controllerProvider,$compileProvider,$filterProvider,$provide){
     
        app.register = {
     
    
     
          controller : $controllerProvider.register,
     
       
          directive: $compileProvider.directive,
     
          filter: $compileProvider.register,
     
          service: $provide.service
     
        };
     
      })
     
      return app;
     
    }); 

    4.module1.html

    <div ng-controller="ctr1">

    5.module2.html

    <div ng-controller="ctr2">
      {{str}}
    </div> 

    6.module1.js

    define(['app'],function(app){
     
      app.register
     
        .controller('ctr1', function($scope){
     
          $scope.str = 'home page';
     
          console.log('page1')
     
        })
     
    }) 

    7.module2.js

    define(['app'],function(app){
     
      app.register
     
        .controller('ctr2',function($scope){
     
          $scope.str = 'local page';
     
          console.log('page2')
     
        })
     
    }) 

    8.server.js  (node 服务)

    var url  = require("url"),
        fs=require("fs"),
        http=require("http"),
        path = require("path");
    
    http.createServer(function (req, res) {
        var pathname=__dirname+url.parse(req.url).pathname;
        if (path.extname(pathname)=="") {
            pathname+="/";
        }
        if (pathname.charAt(pathname.length-1)=="/"){
            pathname+="index.html";
        }
    
        fs.exists(pathname,function(exists){
            if(exists){
                switch(path.extname(pathname)){
                    case ".html":
                        res.writeHead(200, {"Content-Type": "text/html"});
                        break;
                    case ".js":
                        res.writeHead(200, {"Content-Type": "text/javascript"});
                        break;
                    case ".css":
                        res.writeHead(200, {"Content-Type": "text/css"});
                        break;
                    case ".gif":
                        res.writeHead(200, {"Content-Type": "image/gif"});
                        break;
                    case ".jpg":
                        res.writeHead(200, {"Content-Type": "image/jpeg"});
                        break;
                    case ".png":
                        res.writeHead(200, {"Content-Type": "image/png"});
                        break;
                    default:
                        res.writeHead(200, {"Content-Type": "application/octet-stream"});
                }
    
                fs.readFile(pathname,function (err,data){
                    res.end(data);
                });
            } else {
                res.writeHead(404, {"Content-Type": "text/html"});
                res.end("<h1>404 Not Found</h1>");
            }
        });
    }).listen(5000);
    console.log("Server running at localhost");

    参考地址:https://www.jb51.net/article/115695.htm

  • 相关阅读:
    JAVA集合
    js Map 遍历
    Oracle中start with...connect by子句的用法
    javascript的setTimeout()与setTimeout()方法用法总结
    js中替换字符串(replace方法最简单的应用)
    Java中SimpleDateFormat用法详解
    JavaScript如何比较两个数组的内容是否相同
    clientX、pageX、offsetX、screenX的区别
    【翻译】详解HTML5 自定义 Data 属性
    【翻译】使用CSS3和jQuery制作跟随鼠标方位的Hover特效
  • 原文地址:https://www.cnblogs.com/Aaron-Lee/p/11447767.html
Copyright © 2020-2023  润新知