Skip to content

Commit d648d70

Browse files
committed
refactor(module): strict separation between module-config / app-runtime
1 parent 9a8dbfe commit d648d70

34 files changed

Lines changed: 927 additions & 665 deletions

docs/content/guide/dev_guide.services.injecting_controllers.ngdoc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,9 @@ myController.$inject = ['$location', '$log'];
3131
<doc:example module="MyServiceModule">
3232
<doc:source>
3333
<script type="text/javascript">
34-
angular.module.MyServiceModule = ['$provide', function($provide){
35-
$provide.factory('notify', ['$window', function(win) {
34+
angular.
35+
module('MyServiceModule', []).
36+
factory('notify', ['$window', function(win) {
3637
var msgs = [];
3738
return function(msg) {
3839
msgs.push(msg);
@@ -42,7 +43,6 @@ angular.module.MyServiceModule = ['$provide', function($provide){
4243
}
4344
};
4445
}]);
45-
}];
4646

4747
function myController(notifyService) {
4848
this.callNotify = function(msg) {

docs/content/guide/dev_guide.services.managing_dependencies.ngdoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ provided by angular's web framework:
5353
}
5454

5555
// get the main service to kick of the application
56-
angular.injector(batchLogModule).get('routeTemplateMonitor');
56+
angular.injector([batchLogModule]).get('routeTemplateMonitor');
5757
</pre>
5858

5959
Things to notice in this example:

docs/content/guide/dev_guide.templates.filters.creating_filters.ngdoc

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ text upper-case and assigns color.
1919
<doc:example module="MyReverseModule">
2020
<doc:source>
2121
<script type="text/javascript">
22-
angular.module.MyReverseModule = function ($filterProvider) {
23-
$filterProvider.register('reverse', function() {
22+
angular.module('MyReverseModule', []).
23+
filter('reverse', function() {
2424
return function(input, uppercase) {
2525
var out = "";
2626
for (var i = 0; i < input.length; i++) {
@@ -33,7 +33,6 @@ text upper-case and assigns color.
3333
return out;
3434
}
3535
});
36-
}
3736

3837
function Ctrl() {
3938
this.greeting = 'hello';

docs/src/templates/doc_widgets.js

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@
2222
' </body>\n' +
2323
'</html>';
2424

25-
angular.widget('doc:example', ['$injector', '$element', function($injector, element){
26-
this.descend(true); //compile the example code
25+
angular.widget('doc:example', ['$injector', '$browser', '$location', '$element',
26+
function($injector, $browser, $location, element){
27+
this.descend(false); // do not compile the example code
2728
var module = element.attr('module') || '';
2829

2930
//jQuery find() methods in this widget contain primitive selectors on purpose so that we can use
@@ -38,30 +39,26 @@
3839
jsfiddle = example.attr('jsfiddle') || true,
3940
scenario = element.find('pre').eq(1); //doc-scenario
4041

41-
var tabHtml =
42-
'<ul class="doc-example">';
42+
var tabs = angular.element('<ul class="doc-example">');
4343

4444
// show source tab, if not disabled
4545
if (showSource) {
46-
tabHtml +=
46+
tabs.append(
4747
'<li class="doc-example-heading"><h3>Source</h3></li>' +
4848
'<li class="doc-example-source" ng:non-bindable>' +
4949
jsFiddleButton(jsfiddle) + // may or may not have value
50-
'<pre class="brush: js; html-script: true; toolbar: false;"></pre></li>';
50+
'<pre class="brush: js; html-script: true; toolbar: false;"></pre></li>');
5151
}
5252
// show live preview tab
53-
tabHtml +=
54-
'<li class="doc-example-heading"><h3>Live Preview</h3></li>' +
55-
'<li class="doc-example-live">' + htmlSrc +'</li>';
53+
var livePreviewTab;
54+
tabs.append('<li class="doc-example-heading"><h3>Live Preview</h3></li>');
55+
tabs.append(livePreviewTab = angular.element('<li class="doc-example-live">' + htmlSrc +'</li>'));
5656
// show scenario tab, if present
5757
if (scenario.text()) {
58-
tabHtml +=
58+
tabs.append(
5959
'<li class="doc-example-heading"><h3>Scenario Test</h3></li>' +
60-
'<li class="doc-example-scenario"><pre class="brush: js">' + scenario.text() + '</pre></li>';
60+
'<li class="doc-example-scenario"><pre class="brush: js">' + scenario.text() + '</pre></li>');
6161
}
62-
tabHtml +=
63-
'</ul>';
64-
var tabs = angular.element(tabHtml);
6562

6663
tabs.find('li').eq(1).find('pre').text(
6764
HTML_TEMPLATE.
@@ -82,10 +79,23 @@
8279
alert(e);
8380
}
8481

85-
if (module) {
86-
$injector.invoke(null, angular.module[module]);
87-
}
82+
return function() {
83+
var scope = this;
84+
var modules = [
85+
'ng',
86+
function($provide) {
87+
$provide.value('$browser', $browser);
88+
$provide.value('$location', $location);
89+
}
90+
];
91+
module && modules.push(module);
8892

93+
angular.bootstrap(livePreviewTab, modules).invoke(function($rootScope) {
94+
element.bind('$destroy', scope.$root.$watch(function() {
95+
$rootScope.$digest();
96+
}));
97+
});
98+
};
8999

90100
function jsFiddleButton(jsfiddle) {
91101
var fixJsFiddleIssue132 = true;

example/personalLog/test/personalLogSpec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ describe('example.personalLog.LogCtrl', function() {
22
var logCtrl;
33

44
function createNotesCtrl() {
5-
var injector = angular.injector('ng', 'ngMock');
5+
var injector = angular.injector(['ng', 'ngMock']);
66
var scope = injector.get('$rootScope');
77
scope.$cookies = injector.get('$cookies');
88
return scope.$new(example.personalLog.LogCtrl);

src/Angular.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ var $$scope = '$scope',
128128
</pre>
129129
*
130130
* @param {Object|Array} obj Object to iterate over.
131-
* @param {function()} iterator Iterator function.
131+
* @param {Function} iterator Iterator function.
132132
* @param {Object=} context Object to become context (`this`) for the iterator function.
133133
* @returns {Object|Array} Reference to `obj`.
134134
*/
@@ -897,19 +897,22 @@ function angularInit(element, bootstrap) {
897897
*
898898
* @param {Element} element DOM element which is the root of angular application.
899899
* @param {Array<String,function>=} modules an array of module declarations. See: {@link angular.module modules}
900+
* @param {angular.module.auta.$injector} the injector;
900901
*/
901902
function bootstrap(element, modules) {
902903
element = jqLite(element);
903904
modules = modules || [];
904905
modules.unshift('ng');
905-
createInjector(modules).invoke(null,
906+
var injector = createInjector(modules);
907+
injector.invoke(
906908
['$rootScope', '$compile', '$injector', function(scope, compile, injector){
907909
scope.$apply(function() {
908910
element.data('$injector', injector);
909911
compile(element)(scope);
910912
});
911913
}]
912914
);
915+
return injector;
913916
}
914917

915918
function bindJQuery() {

src/AngularPublic.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ function publishExternalAPI(angular){
3030
'equals': equals,
3131
'element': jqLite,
3232
'forEach': forEach,
33-
'injector': function(){ return createInjector(arguments); },
33+
'injector': createInjector,
3434
'noop':noop,
3535
'bind':bind,
3636
'toJson': toJson,
@@ -58,8 +58,8 @@ function publishExternalAPI(angular){
5858
angularModule('ngLocale', []).service('$locale', $LocaleProvider);
5959
}
6060

61-
angularModule('ng', ['ngLocale'], ['$provide', '$injector',
62-
function ngModule($provide, $injector) {
61+
angularModule('ng', ['ngLocale'], ['$provide',
62+
function ngModule($provide) {
6363
// TODO(misko): temporary services to get the compiler working;
6464
$provide.value('$textMarkup', angularTextMarkup);
6565
$provide.value('$attrMarkup', angularAttrMarkup);

0 commit comments

Comments
 (0)