Introduced injector and $new to scope, and injection into link methods and controllers

- added angular.injector(scope, services, instanceCache) which returns inject
    - inject method can return, instance, or call function which have $inject
      property
    - initialize services with $creation=[eager|eager-publish] this means that
      only some of the services are now globally accessible
  - upgraded $become on scope to use injector hence respect the $inject property
    for injection
    - $become should not be run multiple times and will most likely be removed
      in future version
  - added $new on scope to create a child scope
     - $inject is respected on constructor function
  - simplified scopes so that they no longer have separate __proto__ for
    parent, api, behavior and instance this should speed up execution since
    scope will now create one __proto__ chain per scope (not three).

BACKWARD COMPATIBILITY WARNING:
  - services now need to have $inject instead of inject property for proper
    injection this breaks backward compatibility
  - not all services are now published into root scope
    (only: $location, $cookie, $window)
  - if you have widget/directive which uses services on scope
    (such as this.$xhr), you will now have to inject that service in
    (as it is not published on the root scope anymore)
This commit is contained in:
Misko Hevery
2010-10-08 17:30:13 -07:00
parent fbfd160316
commit d9abfe8a7e
17 changed files with 347 additions and 213 deletions

View File

@@ -282,7 +282,7 @@ describe("directives", function(){
});
it('should support nested controllers', function(){
temp.ChildGreeter = function() {
temp.ChildGreeter = function(){
this.greeting = 'hey';
this.$root.childGreeter = this;
};