用requirejs使angularJS模块化开发

首先,要用1.2以上的angular。。。因为这个原因浪费了我两天半的时间。。。

引用模块:angular-route

先加载require.js

index.html

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>{{‘TODO supply a title‘}}</title>
 5     <meta charset="UTF-8">
 6     <meta name="viewport" content="width=device-width, initial-scale=1">
 7     <link href="/assets/css/bootstrap.min.css" rel="stylesheet">
 8     <link href="/assets/css/apply.css" rel="stylesheet">
 9 </head>
10 <body>
11     <header>
12         <div class="container">
13             <img src="/images/logo.png"></div>
14     </header>
15     <main ng-view></main>
16     <footer>
17         <div class="container"></div>
18     </footer>
19     <script type="text/javascript" src="/assets/js/require.js" data-main="/assets/app/main.js"></script>
20 </body>
21 </html>

main.js

 1 require.config({
 2     //配置angular的路径
 3     baseUrl: "/assets",
 4     paths: {
 5         "angular": "js/angular/angular",
 6         "angular-route": "js/angular/angular-route",
 7         "angular-resource": "js/angular/angular-resource"
 8
 9
10
11     },
12     //这个配置是你在引入依赖的时候的包名
13     shim: {
14         "jquery": {
15             exports: "jQuery"
16         },
17         "angular": {
18             exports: "angular"
19         },
20         "angular-route": {
21             deps: [‘angular‘],
22             exports: "angular-route"
23         },
24         "angular-resource": {
25             deps: [‘angular‘],
26             exports: "angular"
27         }
28     }
29 });
30 var app = ‘app.js‘;  // 你的app模块
31 define([‘angular‘, app, ‘angular-route‘], function(angular, app, config) {
32     angular.bootstrap(document, [‘app‘]);  // 关键
33 });

注意 angular.bootstrap(document,[‘app‘]) 必须要手动渲染,因为变成异步加载angular了。
在第二个参数写上你的module名称,这里我起名叫app(在app.js中定义)

app.js(关键点,本人亲自改造,主要运用$routeProvider.when方法中的参数resolve加上$q服务返回deferred对象实现)

 1 define([
 2     ‘angular‘,
 3     ‘app/route/apply‘, // route 文件
 4     // ‘s/md5‘,
 5     ‘angular-route‘,
 6     ‘angular-resource‘
 7 ], function(angular, config) {
 8     var app = angular
 9         .module(‘app‘, [‘ngRoute‘, ‘ngResource‘])
10         .config(function($routeProvider, $controllerProvider) {
11             var router = function(config) {
12                 return angular.extend({
13                     resolve: {
14                         delay: function($q, $rootScope) {
15                             var defer = $q.defer();
16                             require(config.require, function(s) {
17                                 $controllerProvider.register(config.controller, s);
18                                 defer.resolve();
19                                 $rootScope.$apply();
20                             })
21                             return defer.promise;
22                         }
23                     }
24                 }, config);
25             };
26             // 下面的循环请亲自修改成适合自己项目的路径
27             for (var i in config) {
28                 $routeProvider.when(i, router({
29                     templateUrl: ‘html/‘ + config[i].html + ‘.html‘,  // 加载的模板文件地址(同普通$routeProvider)
30                     controller: i,
31                     require: [‘c/‘ + config[i].controller]  // 加载的controller文件,对应的就是require()函数中的第一个参数
32                 }));
33             }
34             $routeProvider.otherwise({
35                 redirectTo: ‘/login‘
36             });
37         })
38
39     return app;
40 });

接下来是上面需要用到的路由配置文件

route.js

 1 define([], function() {
 2     return {
 3         "/": {
 4             html: "apply/step1",
 5             controller: "apply"
 6         },
 7         "/step2": {
 8             html: "apply/step2",
 9             controller: "apply"
10         }
11     };
12 });

最后是控制器 (注意命名要和你的controller一致)

apply.js

 1 define([‘angular‘], function(angular) {
 2     ‘user strict‘;
 3     return [‘$log‘, ‘$http‘, ‘$scope‘, ‘$resource‘,
 4         function($log, $http, $scope, $resource) {
 5             $http
 6                 .get(‘/data/option/apply‘)
 7                 .success(function(data) {
 8                     // console.log(data)
 9                     angular.extend($scope, data);
10                     $scope.data = data.default;
11                 });
12             // 注册
13             $scope.save = function() {
14                 var User = $resource(‘/users‘);
15                 User.save($scope.data, function(rs) {
16
17                 });
18             }
19         }
20     ];
21 });

完成,写的文章不多所以不太好,见谅

另外,由于是手动加载angular的module和异步加载controller,所以无需再html标签上写ng-app和ng-controller,controller名自动设置(即你的路由规则字符串)

时间: 2024-08-04 01:17:07

用requirejs使angularJS模块化开发的相关文章

Angular 结合RequireJs实现模块化开发

angular的指令是模块化很好的一个体现,下面我将只使用指令(不用控制器),结合requirejs,实现模块化开发. 模块化关系图: 传统开发方式 <!--aaa模块--> <div> <h3>this is aaa</h3> <input type="text" ng-model="asd">{{asd}} <button ng-click="submit()">subm

【模块化开发】------requireJS的基本使用------【凡尘】

前言 为了提高代码的复用度,开发人员会按照功能把大量的js代码分成若干文件,这样在多个页面就可以使用同一个文件了.,下面是某个网站的js引用情况 虽然代码的复用度提升了,但是缺点也体现了出来 缺点: 1.网站加载js时会停止其它资源加载,并停止页面渲染(就是我们常说的白屏现象) 2.加载过多的js文件可能造成浏览器假死(浏览器一直在加载,不能进行页面操作) 3.假如文件有依赖关系,就是使用B.js需要先加载A.js,那我们还要小心翼翼的去引入js,不过这么多文件,鬼理得清依赖关系啊 额 ...容

JS模块化开发(requireJS)

使用模块化开发的好处: 通过 exports 暴露接口.这意味着不需要命名空间了,更不需要全局变量.这是一种彻底的命名冲突解决方案. 通过 require 引入依赖.这可以让依赖内置,开发者只需关心当前模块的依赖,其他事情 Sea.js/ Require.js 都会自动处理好.对模块开发者来说,这是一种很好的 关注度分离,能让程序员更多地享受编码的乐趣 实现JS模块化开发,目前有两个规范,一个是AMD规范,一个是CMD规范. RequireJS遵循的是AMD规范.AMD推崇依赖前置. SeaJS

模块化开发RequireJS之shim配置

一.shim requirejs使用AMD规范开发,若开发过程中加载非AMD规范js,需要使用requirejs的shim进行配置. shim配置语法为: //配置文件 requirejs.config({ baseUrl: 'js', //默认是main.js所在的文件夹为基准. paths: { jquery: 'jquery-1.12.4.min' //起个别名 }, //关键配置 shim: { //配置方式一:jQuery.CateNav为模块名称,jquery为依赖的js模块 //'

模块化开发(requireJS)

模块化 在前端使用模块化开发,可以将代码根据功能实施模块的划分,每个模块功能(职责)单一,在需要更改对应的功能的时候,只需要对指定的模块进行修改,其他模块不受任何影响. 为什么要进行前端模块化? 达到公共模块的复用 可以很好的解决全局变量污染的问题 可以很好的解决各个功能之间的依赖关系 如何实现前端模块化开发 JavaScript本身不支持模块化开发,但是可以通过一些手段来实现. CommonJS是一个规范,用来规定模块化开发的标准. CommonJS由于一系列的限制,在前端开发当中,并不能很好

前端模块化开发学习之gulp&amp;browserify篇

 随着web应用的发展,前端的比重占得越来越多,编写代码从而也越来越复杂.而通常我们需要将不同功能或者不同模块的代码分开写,最后在html中一起加载,这样做是可以的,但是当你需要进行维护或者是二次开发的时候,你会觉得十分费劲,因为你不知道文件之间复杂的关系,所以我们需要利用一些插件来配合进行模块化的开发. 所谓模块化的开发,写过nodejs的人都知道,文件之间的依赖可以用require()实现,但是浏览器端是不支持这样的依赖形式的,而browserify却可以解决这个问题,再加上gulp这个强大

关于模块化开发,CMD和AMD

模块化 首先要理解的是什么是模块化,模块化这个词来源于研究工程设计中的<Design Rules>,是指可组成系统的.具有某种确定独立功能的半自律性的子系统. 模块化在编程中的意义是为了减少软件的复杂度,使软件不会因为不断的扩大而导致功能维护.添加变得十分困难.而通过模块的拼接,就可以组成一些列的复杂的系统,同时   模块与模块之间耦合度低.这种拼凑是灵活的,自由的 为什么要模块化 web前端不断发展,其中各种插件的代码量已经不是以前可比的了.而代码量的上升会暴露出许多问题: 首先是命名,即命

转载,网站前端模块化开发策略研究

引言 当今互联网飞速发展,网络用户的需求变化既快又大,且不可捉摸,大部分网站的更新周期都是以日.小时甚至分钟为单位.在这种情况下,网站的前端就成了 变化最频繁的部分.随着互联网公司对前端开发的逐渐重视,前端开发人数也越来越多,可是,技术人员的投入总是有限的.面对需求的快速变化,引发了很多如前 端编码规范.前端性能优化.前端安全漏洞防范等方面的问题.为了解决这些问题,一种具有先进开发思想和良好设计模式的前端模块化技术正逐渐成熟,并受到越来越多公司的青睐. 1 前端模块化技术的应用现状 前端模块化开

UC前端‘搭积木’的模块化开发——scrat.js

模块化开发 将模块所需的js\css\img\tmpl维护在一起,一个模块一个目录 js渲染模板 css只关心模块内样式 开发团队心声:"我们希望每次研发新产品不是从零开始,不同团队不同项目之间能有可复用的模块沉淀下来." 模块生态 每个工程有_工程模块_和_生态模块_. 生态模块:基于_component规范_开发,部署到Github上,可以通过命令行工具将Github上的模块安装到工程中使用.比如:jQuery, iscroll, zepto.js, vue.js 安装命令: sc