首页 > 代码库 > 用requirejs使angularJS模块化开发
用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对象实现)
apply.js 在第二个参数写上你的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.js1 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一致)
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 = http://www.mamicode.com/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名自动设置(即你的路由规则字符串)
用requirejs使angularJS模块化开发
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。