angular-cn/modules/@angular/router
Miško Hevery d169c2434e feat(core): Add type information to injector.get() (#13785)
- Introduce `InjectionToken<T>` which is a parameterized and type-safe
  version of `OpaqueToken`.

DEPRECATION:
- `OpaqueToken` is now deprecated, use `InjectionToken<T>` instead.
- `Injector.get(token: any, notFoundValue?: any): any` is now deprecated
  use the same method which is now overloaded as
  `Injector.get<T>(token: Type<T>|InjectionToken<T>, notFoundValue?: T): T;`.

Migration
- Replace `OpaqueToken` with `InjectionToken<?>` and parameterize it.
- Migrate your code to only use `Type<?>` or `InjectionToken<?>` as
  injection tokens. Using other tokens will not be supported in the
  future.

BREAKING CHANGE:
- Because `injector.get()` is now parameterize it is possible that code
  which used to work no longer type checks. Example would be if one
  injects `Foo` but configures it as `{provide: Foo, useClass: MockFoo}`.
  The injection instance will be that of `MockFoo` but the type will be
  `Foo` instead of `any` as in the past. This means that it was possible
  to call a method on `MockFoo` in the past which now will fail type
  check. See this example:

```
class Foo {}
class MockFoo extends Foo {
  setupMock();
}

var PROVIDERS = [
  {provide: Foo, useClass: MockFoo}
];

...

function myTest(injector: Injector) {
  var foo = injector.get(Foo);
  // This line used to work since `foo` used to be `any` before this
  // change, it will now be `Foo`, and `Foo` does not have `setUpMock()`.
  // The fix is to downcast: `injector.get(Foo) as MockFoo`.
  foo.setUpMock();
}
```

PR Close #13785
2017-01-17 15:34:54 -06:00
..
scripts chore(router): changes the router setup to align with other modules 2016-06-21 12:17:30 -07:00
src feat(core): Add type information to injector.get() (#13785) 2017-01-17 15:34:54 -06:00
test feat(Router): call resolver when upstream params change (#12942) 2017-01-09 18:56:58 -05:00
testing chore(tslint): update tslint to 4.x (#13603) 2016-12-27 14:55:58 -08:00
.gitignore chore(router): update config before publishing to npm 2016-06-21 12:17:30 -07:00
CHANGELOG.md docs(router): add changelog for 3.0.0-rc.2 2016-08-31 16:55:18 -07:00
LICENSE chore: set up test and build infrastructure 2016-06-21 12:17:30 -07:00
README.md refactor(core): change module semantics 2016-07-26 07:04:10 -07:00
index.ts fix: display framework version on bootstrapped component (#13252) 2016-12-06 16:21:07 -08:00
karma-test-shim.js fix: correctly show error when karma fails to load 2017-01-06 19:30:09 -05:00
karma.conf.js refactor: add license header to JS files & format files (#12081) 2016-10-04 20:39:20 -07:00
package.json feat: update to rxjs@5.0.1 and unpin the rxjs peerDeps via ^5.0.1 (#13572) 2016-12-19 16:24:53 -08:00
rollup-testing.config.js refactor: add license header to JS files & format files (#12081) 2016-10-04 20:39:20 -07:00
rollup-upgrade.config.js feat(router): add a provider making angular1/angular2 integration easier (#12769) 2016-11-09 13:33:33 -08:00
rollup.config.js fix(router): correctly export concatMap operator in es5 (#12430) 2016-11-02 21:55:02 -07:00
tsconfig-build.json feature(tsc-wrapped): add option for closure compiler JSDoc annotations 2016-11-18 09:37:40 -08:00
tsconfig-testing.json fix(packages): use ES modules for primary build (#11120) 2016-08-30 18:07:40 -07:00
tsconfig-upgrade.json fix(router): check if windows.console exists before using it (#12348) 2016-11-11 10:46:53 -08:00
upgrade.ts feat(core): Add type information to injector.get() (#13785) 2017-01-17 15:34:54 -06:00

README.md

Angular Router

Managing state transitions is one of the hardest parts of building applications. This is especially true on the web, where you also need to ensure that the state is reflected in the URL. In addition, we often want to split applications into multiple bundles and load them on demand. Doing this transparently isnt trivial.

The Angular router is designed to solve these problems. Using the router, you can declaratively specify application state, manage state transitions while taking care of the URL, and load components on demand.

Overview

Read the overview of the Router here.

Guide

Read the dev guide here.

Local development

# keep @angular/router fresh
$ ./scripts/karma.sh

# keep @angular/core fresh
$ ../../../node_modules/.bin/tsc -p modules --emitDecoratorMetadata -w

# start karma
$ ./scripts/karma.sh