Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 50e6370

Browse files
committed
add dependencies attr in routeProvider.when and stateProvider.state
1 parent 7a880a6 commit 50e6370

File tree

3 files changed

+110
-109
lines changed

3 files changed

+110
-109
lines changed

‎angular-async-loader.js‎

Lines changed: 106 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -5,175 +5,186 @@
55
*
66
* subchen@gmail.com
77
*/
8-
(function() {
8+
(function() {
99

1010
function factory(angular, undefined) {
1111

12+
// Support require.js, sea.js, system.js
13+
var amdRequire = (function() {
14+
if (typeof(require) === 'function') {
15+
if (typeof(require.async) === 'function') {
16+
return require.async;
17+
}
18+
else {
19+
return require;
20+
}
21+
} else if (typeof(seajs) === 'object' && typeof(seajs.use) === 'function') {
22+
return seajs.use;
23+
} else if (typeof(System) === 'object' && typeof(System.import) === 'function') {
24+
return System.import;
25+
}
26+
throw new Error('No amd/cmd module loader found.');
27+
}());
28+
29+
/**
30+
* Load external dependencies, such as Controller, Service, etc.
31+
*
32+
* @param {String|Array} dependencies
33+
* @returns {*} a promised function to ajax load dependencies
34+
*/
35+
function requireLoadFn(dependencies) {
36+
if (typeof dependencies === 'string') {
37+
dependencies = [dependencies];
38+
}
39+
return ['$q', '$rootScope', function($q, $rootScope) {
40+
var defer = $q.defer();
41+
amdRequire(dependencies, function() {
42+
defer.resolve(Array.prototype.slice.call(arguments));
43+
$rootScope.$apply();
44+
});
45+
return defer.promise;
46+
}];
47+
}
48+
49+
/**
50+
* Rewrite route config for $routeProvider.when or $stateProvider.state.
51+
*
52+
* Transform 'controllerUrl' and 'dependencies' attrs into resolve object.
53+
*
54+
* @param {Object} config
55+
* @returns {Object} the modified config
56+
*/
57+
function route(config) {
58+
59+
function rewriteConfig(config) {
60+
if (config.hasOwnProperty('controllerUrl') || config.hasOwnProperty('dependencies')) {
61+
var dependencies = config.dependencies;
62+
if (dependencies === undefined) {
63+
dependencies = [];
64+
} else if (typeof dependencies === 'string') {
65+
dependencies = [dependencies];
66+
}
67+
if (config.controllerUrl) {
68+
dependencies.push(config.controllerUrl);
69+
}
70+
delete config.dependencies;
71+
delete config.controllerUrl;
72+
73+
var resolve = config.resolve || {};
74+
resolve['$dummy'] = requireLoadFn(dependencies);
75+
config.resolve = resolve;
76+
}
77+
}
78+
79+
// multiple views support
80+
if (config.hasOwnProperty('views')) {
81+
Object.keys(config.views).forEach(function(view) {
82+
rewriteConfig(config.views[view]);
83+
});
84+
} else {
85+
rewriteConfig(config);
86+
}
87+
88+
return config;
89+
}
90+
91+
1292
return {
1393
VERSION: '1.1.0',
1494

15-
configure: function (app) {
16-
17-
// Support require.js, sea.js, system.js
18-
if (app.require === undefined) {
19-
if (typeof(require) === 'function') {
20-
if (typeof(require.async) === 'function') {
21-
app.require = require.async;
22-
} else {
23-
app.require = require;
24-
}
25-
} else if (typeof(seajs) === 'object' && typeof (seajs.use) === 'function') {
26-
app.require = seajs.use;
27-
} else if (typeof(System) === 'object' && typeof (System.import) === 'function') {
28-
app.require = System.import;
29-
}
30-
}
95+
configure: function(app) {
3196

3297
app.provider('$asyncLoader', [
33-
'$controllerProvider',
34-
'$compileProvider',
35-
'$provide',
36-
'$filterProvider',
37-
function($controllerProvider,
98+
'$controllerProvider',
99+
'$compileProvider',
100+
'$provide',
101+
'$filterProvider',
102+
function($controllerProvider,
38103
$compileProvider,
39104
$provide,
40105
$filterProvider) {
41-
this.$get = function() {
106+
this.$get = function() {
42107
return {
43108
$controllerProvider: $controllerProvider,
44109
$compileProvider: $compileProvider,
45110
$provide: $provide,
46111
$filterProvider: $filterProvider
47112
};
48113
};
49-
}]);
114+
}
115+
]);
50116

51-
app.run(['$asyncLoader', function($asyncLoader) {
117+
app.run(['$asyncLoader', function($asyncLoader) {
52118
var $controllerProvider = $asyncLoader.$controllerProvider;
53119
var $compileProvider = $asyncLoader.$compileProvider;
54120
var $provide = $asyncLoader.$provide;
55121
var $filterProvider = $asyncLoader.$filterProvider;
56122

57-
app.value = function(name, value) {
123+
app.value = function(name, value) {
58124
$provide.value(name, value);
59125
return app;
60126
};
61127

62-
app.constant = function(name, value) {
128+
app.constant = function(name, value) {
63129
$provide.constant(name, value);
64130
return app;
65131
};
66132

67-
app.factory = function(name, factory) {
133+
app.factory = function(name, factory) {
68134
$provide.factory(name, factory);
69135
return app;
70136
};
71137

72-
app.service = function(name, service) {
138+
app.service = function(name, service) {
73139
$provide.service(name, service);
74140
return app;
75141
};
76142

77-
app.filter = function(name, filter) {
143+
app.filter = function(name, filter) {
78144
$filterProvider.register(name, filter);
79145
return app;
80146
};
81147

82-
app.directive = function(name, directive) {
148+
app.directive = function(name, directive) {
83149
$compileProvider.directive(name, directive);
84150
return app;
85151
};
86152

87-
app.controller = function(name, controller) {
153+
app.controller = function(name, controller) {
88154
$controllerProvider.register(name, controller);
89155
return app;
90156
};
91157

92-
app.decorator = function(name, decorator) {
158+
app.decorator = function(name, decorator) {
93159
$provide.decorator(name, decorator);
94160
return app;
95161
};
96162

97-
app.provider = function(name, service) {
163+
app.provider = function(name, service) {
98164
$provide.provider(name, service);
99165
return app;
100166
};
101167
}]);
102168

103169
// rewrite $routeProvider.when
104170
if (app.requires && app.requires.indexOf('ngRoute') !== -1) {
105-
app.config(['$routeProvider', function($routeProvider) {
171+
app.config(['$routeProvider', function($routeProvider) {
106172
var whenFn = $routeProvider.when;
107173
$routeProvider.when = function(path, config) {
108-
return whenFn.call($routeProvider, path, app.route(config));
174+
return whenFn.call($routeProvider, path, route(config));
109175
};
110176
}]);
111177
}
112178
// rewrite $stateProvider.state
113179
if (app.requires && app.requires.indexOf('ui.router') !== -1) {
114-
app.config(['$stateProvider', function($stateProvider) {
180+
app.config(['$stateProvider', function($stateProvider) {
115181
var stateFn = $stateProvider.state;
116182
$stateProvider.state = function(state, config) {
117-
return stateFn.call($stateProvider, state, app.route(config));
183+
return stateFn.call($stateProvider, state, route(config));
118184
};
119185
}]);
120186
}
121187

122-
/**
123-
* Rewrite config for $routeProvider.when or $stateProvider.state.
124-
*
125-
* Populate the resolve attribute using either 'controllerUrl'.
126-
*
127-
* @param {Object} config
128-
* @returns the modified config
129-
*/
130-
app.route = function (config) {
131-
function rewriteViewConfig(config) {
132-
if (config.hasOwnProperty('controllerUrl')) {
133-
var controllerUrl = config.controllerUrl;
134-
delete config.controllerUrl;
135-
136-
var resolve = config.resolve || {};
137-
resolve.dummyController = app.load([controllerUrl]);
138-
config.resolve = resolve;
139-
}
140-
}
141-
142-
// multiple views support
143-
if (config.hasOwnProperty('views')) {
144-
Object.keys(config.views).forEach(function(view) {
145-
rewriteViewConfig(config.views[view]);
146-
});
147-
} else {
148-
rewriteViewConfig(config);
149-
}
150-
151-
return config;
152-
};
153-
154-
155-
/**
156-
* Load external resources, such as Controller, Service, etc.
157-
*
158-
* @param {String|Array} dependencies
159-
* @returns {*} a promised function to ajax load resource
160-
*/
161-
app.load = function (dependencies) {
162-
if (!angular.isArray(dependencies)) {
163-
dependencies = [dependencies];
164-
}
165-
166-
return ['$q', '$rootScope', function ($q, $rootScope) {
167-
var defer = $q.defer();
168-
app.require(dependencies, function () {
169-
var out = arguments[arguments.length - 1];
170-
defer.resolve(out);
171-
$rootScope.$apply();
172-
});
173-
return defer.promise;
174-
}];
175-
};
176-
177188

178189
var injector;
179190

@@ -183,7 +194,7 @@
183194
* @param {String} name
184195
* @returns {*} the injected object
185196
*/
186-
app.get = function(name) {
197+
app.get = function(name) {
187198
if (injector === undefined) {
188199
var elements = [app.element, document, 'html', 'body'];
189200
for (var i = 0; i < elements.length; i++) {
@@ -204,7 +215,7 @@
204215
* @exports
205216
*/
206217
if (typeof(define) === 'function' && define.amd) {
207-
define(['angular'], function(angular) {
218+
define(['angular'], function(angular) {
208219
return factory(angular);
209220
});
210221
} else {

‎sample/webapp/app-routes.js‎

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,12 @@ define(function (require) {
1616
controllerUrl: 'home/homeCtrl', // new attribute for ajax load controller js
1717
controller: 'homeCtrl'
1818
})
19-
.state('users', app.route({
19+
.state('users', {
2020
url: '/users',
2121
templateUrl: 'users/users.html',
2222
controllerUrl: 'users/usersCtrl', // new attribute for ajax load controller js
2323
controller: 'usersCtrl',
24-
25-
/*
26-
// customize to load more dependencies
27-
resolve: {
28-
dummy: app.load([
29-
'users/usersCtrl', // controller
30-
'services/usersService' // service
31-
// filters, directives, ...
32-
])
33-
}
34-
*/
35-
}));
24+
dependencies: ['services/usersService']
25+
});
3626
}]);
3727
});

‎sample/webapp/users/usersCtrl.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
define(function (require) {
22
var app = require('../app');
33

4-
require('../services/usersService');
4+
//require('../services/usersService');
55

66
app.controller('usersCtrl', ['$scope', function ($scope) {
77
$scope.userList = app.get('usersService').list();

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /