zoukankan      html  css  js  c++  java
  • angularJs项目初建

    在不使用构建工具的前提下,多人开发使用一个js或css文件开发是很不好的,对性能也不太好,

    因为有可能文件太大而所需的内容又占比很小,每个页面要用到的内容少,但全部页面的内容合在一起

    这样就不太好的,有点冗余,所以按需加载是最好的,每个文件的功能也明确。

    而angularJs有指令,过滤器,服务,控制器,路由,这些明确分配的功能。

    使用requireJs、oclazyload、angular-ui-router配合使用,构建一个按需加载的项目。

    目录:

    以这个目录为基础。

    当然网上还有很多关于angular目录。

    如果可以使用webpack,可以直接脚手架,angular-cli。

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no">
        <title>webapp</title>
        <link rel="stylesheet" href="./style/index.css" media="screen" title="no title" charset="utf-8">
    </head>
    <body>
    <div ui-view></div>
    <script>
        document.querySelector("html").style.fontStyle = window.screen.width / 10 + "px";
    </script>
    <script src="./vendor/require.js" data-main="./script/main.js" charset="utf-8"></script>
    </body>
    </html>

    main.js

    require.config({
        paths: {
            "angular": "../vendor/angular/angular.min",
            "router": "../vendor/angular-ui-router/release/angular-ui-router.min",
            "cookies": "../vendor/angular-cookies/angular-cookies.min",
            "validation": "../vendor/angular-validation/dist/angular-validation",
            "animate": "../vendor/angular-animate/angular-animate.min",
            "ocLazyLoad": "../vendor/ocLazyLoad.require",
            "app": "./app",
            "config-router": "./config/router"
        },
        shim: {
            "router": ["angular"],
            "cookies": ["angular"],
            "validation": ["angular"],
            "animate": ["angular"],
            "ocLazyLoad": ["angular"],
            "app": ["ocLazyLoad","router","cookies","validation","animate"],
            "config-router": ["app"]
        }
    });
    
    require(["config-router"],function(){
        angular.bootstrap(document.body, ['app']);
    });

    app.js

    'use strict';
    var app = angular.module("app",["ui.router","oc.lazyLoad","ngCookies","validation","ngAnimate"]);

    router.js

    /*
    如果要配置公共的指令和过滤器或者服务要到main.js配置依赖,直接加载
     */
    
    /*
    配置动态加载文件的配置对象,这里加载都是去缓存的
     */
    
    var routerConfigObj = [
        {
            'name': 'main',
            'controller:''mainCtrl',
            'templateUrl': 'view/main.html',
            'files': ["./style/main.css","./script/controller/mainCtrl.js","./script/directive/head.js","./script/directive/foot.js","./script/service/cache.js"]
        },
        {
            'name': 'login',
            'controller:''loginCtrl',
            'templateUrl': 'view/main.html',
            'files': ["./style/main.css","./script/controller/loginCtrl.js","./script/directive/head.js","./script/directive/foot.js","./script/service/cache.js"]
        }
    ];
    
    
    //config里面注入的都是服务带Provider后缀
    
    app.config(['$stateProvider', '$urlRouterProvider','$controllerProvider','$compileProvider','$filterProvider','$provide','$ocLazyLoadProvider',
        function($stateProvider,$urlRouterProvider,$controllerProvider,$compileProvider,$filterProvider,$provide,$ocLazyLoadProvider){
        /*
        controller需要在config重新注册后才能使用resolve生效按需加载
        其他的按需加载以一样,如指令directive
         */
        app = {
            controller: $controllerProvider.register,
            directive: $compileProvider.directive,
            filter: $filterProvider.register,
            factory: $provide.factory,
            service: $provide.service
        };
    
        $ocLazyLoadProvider.config({
            debug: true
          });
    
        routerRegsiter($stateProvider,routerConfigObj);
    
        
        // 默认重定向路径
        $urlRouterProvider.otherwise('main');
    }]);
    
    /*$ocLazyLoad 的require版本使用的是require加载js,所以cache去除缓存不生效,要在require里去除缓存*/
    
    /*resolve 会先加载后注入到controller里,所它的键值对的键就是注入名*/
    
    function routerRegsiter($stateProvider,objArr){
        objArr.forEach(function(item){
            $stateProvider.state(item.name,{
                url: '/'+item.name,
                   templateUrl: item.templateUrl,
                   controller: item.controller,
                resolve: {
                    deps: ["$ocLazyLoad",function($ocLazyLoad){
                        return $ocLazyLoad.load([{
                            files:item.files.map(function(t){return t+"?"+(new Date()).getTime();})
                        }]);
                    }]
                }
            });
        });
    }
    
            
    routerConfigObj 变量是配置路由、控制器等按需加载的配置地方。
    routerRegsiter会循环routerConfigObj 配置路由。

    以上是所有的代码,剩下的就是按需加载文件的编写。

    这只是初步的使用,具体的使用还是要按照项目的需求建构,比如子页面的加载,多页面的配置,多控制器等。

  • 相关阅读:
    win7 x64怎么枚举所有快捷键呢
    C/C++多种方法获取文件大小
    中缀表达式转后缀表达式(逆波兰表达式)
    检测文件存在的四种方法
    透明窗口与不规则窗口制作方法总结
    Struts 2命令执行漏洞
    Windows 8 无法安装
    从浏览器启动客户端程序
    tesseractocr训练方法
    Algorithm Gossip: 中序式轉後序式(前序式)
  • 原文地址:https://www.cnblogs.com/zhangzhicheng/p/8232676.html
Copyright © 2011-2022 走看看