Skip to content
This repository has been archived by the owner on Apr 12, 2024. It is now read-only.

Remove the $controllerProvider.allowGlobals flag #15349

Closed
mgol opened this issue Nov 2, 2016 · 0 comments
Closed

Remove the $controllerProvider.allowGlobals flag #15349

mgol opened this issue Nov 2, 2016 · 0 comments

Comments

@mgol
Copy link
Member

mgol commented Nov 2, 2016

Note: for support questions, please use one of these channels: https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#question. This repository's issues are reserved for feature requests and bug reports.

Do you want to request a feature or report a bug?
A breaking change request.

What is the current behavior?
$controllerProvider.allowGlobals is set to false by default. Setting it to true allows $controller to find controller constructors on window which is discouraged.

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem via https://plnkr.co or similar (template: http://plnkr.co/edit/tpl:yBpEi4).

What is the expected behavior?
$controllerProvider.allowGlobals flag should be removed.

What is the motivation / use case for changing the behavior?
Relying on global controller constructors is an anti-pattern and can mask bugs as you can't always control all the global elements on the page. We've been discouraging this pattern for some time.

Which versions of Angular, and which browser / OS are affected by this issue? Did this work in previous versions of Angular? Please also test with the latest stable and snapshot (https://code.angularjs.org/snapshot/) versions.
All.

Other information (e.g. stacktraces, related issues, suggestions how to fix)

@mgol mgol added this to the 1.6.0-rc.1 milestone Nov 2, 2016
@mgol mgol changed the title Flip the $controllerProvider.allowGlobals flag to false by default Remove the $controllerProvider.allowGlobals flag Nov 2, 2016
@mgol mgol modified the milestones: 1.7.0, 1.6.0-rc.1 Nov 2, 2016
Narretz added a commit to Narretz/angular.js that referenced this issue Feb 28, 2017
…onstructors on `window`

This also removes the likewise deprecated `$controllerProvider.allowGlobals()` method.

Closes angular#15349

BREAKING CHANGE:

The option to instantiate controllers from constructors on the global `window` object
has been removed. Likewise, the deprecated `$controllerProvider.allowGlobals()`
method that could enable this behavior, has been removed.

This behavior had been deprecated since AngularJS v1.3.0, because polluting the global scope
is bad. To migrate, remove the call to $controllerProvider.allowGlobals() in the config, and
register your controller via the Module API or the $controllerProvider, e.g.

```
angular.module('myModule', []).controller('myController', function() {...});

angular.module('myModule', []).config(function($controllerProvider) {
  $controllerProvider.register('myController', function() {...});
});

```
Narretz added a commit that referenced this issue Mar 1, 2017
This also removes the likewise deprecated `$controllerProvider.allowGlobals()` method.

Closes #15349
Closes #15762

BREAKING CHANGE:

The option to instantiate controllers from constructors on the global `window` object
has been removed. Likewise, the deprecated `$controllerProvider.allowGlobals()`
method that could enable this behavior, has been removed.

This behavior had been deprecated since AngularJS v1.3.0, because polluting the global scope
is bad. To migrate, remove the call to $controllerProvider.allowGlobals() in the config, and
register your controller via the Module API or the $controllerProvider, e.g.

```
angular.module('myModule', []).controller('myController', function() {...});

angular.module('myModule', []).config(function($controllerProvider) {
  $controllerProvider.register('myController', function() {...});
});

```
ellimist pushed a commit to ellimist/angular.js that referenced this issue Mar 15, 2017
This also removes the likewise deprecated `$controllerProvider.allowGlobals()` method.

Closes angular#15349
Closes angular#15762

BREAKING CHANGE:

The option to instantiate controllers from constructors on the global `window` object
has been removed. Likewise, the deprecated `$controllerProvider.allowGlobals()`
method that could enable this behavior, has been removed.

This behavior had been deprecated since AngularJS v1.3.0, because polluting the global scope
is bad. To migrate, remove the call to $controllerProvider.allowGlobals() in the config, and
register your controller via the Module API or the $controllerProvider, e.g.

```
angular.module('myModule', []).controller('myController', function() {...});

angular.module('myModule', []).config(function($controllerProvider) {
  $controllerProvider.register('myController', function() {...});
});

```
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

1 participant