Created
July 8, 2015 14:54
-
-
Save jwcarroll/4d499d0612b0b7b12c11 to your computer and use it in GitHub Desktop.
Angular2-alpha.30 TypeScript Definition Files
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Type definitions for Angular v2.0.0-local_sha.6c933a4 | |
// Project: http://angular.io/ | |
// Definitions by: angular team <https://github.com/angular/> | |
// Definitions: https://github.com/borisyankov/DefinitelyTyped | |
// *********************************************************** | |
// This file is generated by the Angular build process. | |
// Please do not create manual edits or send pull requests | |
// modifying this file. | |
// *********************************************************** | |
// Angular depends transitively on these libraries. | |
// If you don't have them installed you can run | |
// $ tsd query es6-promise rx rx-lite --action install --save | |
///<reference path="../es6-promise/es6-promise.d.ts"/> | |
///<reference path="../rx/rx.d.ts"/> | |
interface List<T> extends Array<T> {} | |
interface Map<K,V> {} | |
interface StringMap<K,V> extends Map<K,V> {} | |
declare module ng { | |
type SetterFn = typeof Function; | |
type int = number; | |
interface Type extends Function { | |
new (...args); | |
} | |
// See https://github.com/Microsoft/TypeScript/issues/1168 | |
class BaseException /* extends Error */ { | |
message: string; | |
stack: string; | |
toString(): string; | |
} | |
} | |
declare module ng { | |
/** | |
* `DependencyAnnotation` is used by the framework to extend DI. | |
* | |
* | |
* | |
* Only annotations implementing `DependencyAnnotation` are added to the list of dependency | |
* | |
* properties. | |
* | |
* | |
* | |
* For example: | |
* | |
* | |
* | |
* ``` | |
* | |
* class Parent extends DependencyAnnotation {} | |
* | |
* class NotDependencyProperty {} | |
* | |
* | |
* | |
* class AComponent { | |
* | |
* constructor(@Parent @NotDependencyProperty aService:AService) {} | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* will create the following dependency: | |
* | |
* | |
* | |
* ``` | |
* | |
* new Dependency(Key.get(AService), [new Parent()]) | |
* | |
* ``` | |
* | |
* | |
* | |
* The framework can use `new Parent()` to handle the `aService` dependency | |
* | |
* in a specific way. | |
* | |
* | |
* | |
* @exportedAs angular2/di_annotations | |
*/ | |
class DependencyAnnotation { | |
token: void; | |
} | |
/** | |
* Lifecycle events are guaranteed to be called in the following order: | |
* | |
* - `onChange` (optional if any bindings have changed), | |
* | |
* - `onInit` (optional after the first check only), | |
* | |
* - `onCheck`, | |
* | |
* - `onAllChangesDone` | |
*/ | |
class LifecycleEvent { | |
name: string; | |
} | |
/** | |
* An interface that <a href='/angular2/angular2.api/NgFormModel'><code>NgFormModel</code></a> and <a href='/angular2/angular2.api/NgForm'><code>NgForm</code></a> implement. | |
* | |
* | |
* | |
* Only used by the forms module. | |
*/ | |
interface Form { | |
addControl(dir: NgControl): void; | |
removeControl(dir: NgControl): void; | |
getControl(dir: NgControl): Control; | |
addControlGroup(dir: NgControlGroup): void; | |
removeControlGroup(dir: NgControlGroup): void; | |
updateModel(dir: NgControl, value: any): void; | |
} | |
/** | |
* An interface implemented by all Angular type decorators, which allows them to be used as ES7 | |
* | |
* decorators as well as | |
* | |
* Angular DSL syntax. | |
* | |
* | |
* | |
* DSL syntax: | |
* | |
* | |
* | |
* ``` | |
* | |
* var MyClass = ng | |
* | |
* .Component({...}) | |
* | |
* .View({...}) | |
* | |
* .Class({...}); | |
* | |
* ``` | |
* | |
* | |
* | |
* ES7 syntax: | |
* | |
* | |
* | |
* ``` | |
* | |
* @ng.Component({...}) | |
* | |
* @ng.View({...}) | |
* | |
* class MyClass {...} | |
* | |
* ``` | |
*/ | |
interface TypeDecorator { | |
/** | |
* Invoke as ES7 decorator. | |
*/ | |
<T extends Type>(type: T): T; | |
/** | |
* Storage for the accumulated annotations so far used by the DSL syntax. | |
* | |
* | |
* | |
* Used by <a href='/angular2/angular2.api/Class'><code>Class</code></a> to annotate the generated class. | |
*/ | |
annotations: Array<any>; | |
/** | |
* Generate a class from the definition and annotate it with <a href='/angular2/angular2.api/TypeDecorator#annotations'><code>TypeDecorator</code></a>. | |
*/ | |
Class(obj: ClassDefinition): Type; | |
} | |
/** | |
* Declares the interface to be used with <a href='/angular2/angular2.api/Class'><code>Class</code></a>. | |
*/ | |
interface ClassDefinition { | |
/** | |
* Optional argument for specifying the superclass. | |
*/ | |
extends?: Type; | |
/** | |
* Required constructor function for a class. | |
* | |
* | |
* | |
* The function may be optionall wrapped in an `Array`, in which case additional parameter | |
* | |
* annotations may be | |
* | |
* specified. The number of arguments and the number of paramater annotations must match. | |
* | |
* | |
* | |
* See <a href='/angular2/angular2.api/Class'><code>Class</code></a> for example of usage. | |
*/ | |
constructor: (Function | Array<any>); | |
} | |
/** | |
* Specifies that a <a href='/angular2/angular2.api/QueryList'><code>QueryList</code></a> should be injected. | |
* | |
* | |
* | |
* See <a href='/angular2/angular2.api/QueryList'><code>QueryList</code></a> for usage and example. | |
* | |
* | |
* | |
* @exportedAs angular2/annotations | |
*/ | |
class Query extends DependencyAnnotation { | |
descendants: boolean; | |
selector: void; | |
isVarBindingQuery: boolean; | |
varBindings: List<string>; | |
toString(): string; | |
} | |
/** | |
* A directive that contains a group of [NgControl]. | |
* | |
* | |
* | |
* Only used by the forms module. | |
*/ | |
class ControlContainer { | |
name: string; | |
formDirective: Form; | |
path: List<string>; | |
} | |
/** | |
* A marker annotation that marks a class as available to `Injector` for creation. Used by tooling | |
* | |
* for generating constructor stubs. | |
* | |
* | |
* | |
* ``` | |
* | |
* class NeedsService { | |
* | |
* constructor(svc:UsefulService) {} | |
* | |
* } | |
* | |
* | |
* | |
* @Injectable | |
* | |
* class UsefulService {} | |
* | |
* ``` | |
* | |
* @exportedAs angular2/di_annotations | |
*/ | |
class Injectable { | |
visibility: Visibility; | |
} | |
/** | |
* Specifies how injector should resolve a dependency. | |
* | |
* | |
* | |
* See <a href='/angular2/angular2.api/Self'><code>Self</code></a>, <a href='/angular2/angular2.api/Parent'><code>Parent</code></a>, <a href='/angular2/angular2.api/Ancestor'><code>Ancestor</code></a>, <a href='/angular2/angular2.api/Unbounded'><code>Unbounded</code></a>. | |
* | |
* | |
* | |
* @exportedAs angular2/di_annotations | |
*/ | |
class Visibility { | |
depth: number; | |
crossBoundaries: boolean; | |
includeSelf: boolean; | |
toString(): string; | |
} | |
/** | |
* Injectable Objects that contains a live list of child directives in the light Dom of a directive. | |
* | |
* The directives are kept in depth-first pre-order traversal of the DOM. | |
* | |
* | |
* | |
* In the future this class will implement an Observable interface. | |
* | |
* For now it uses a plain list of observable callbacks. | |
* | |
* | |
* | |
* @exportedAs angular2/view | |
*/ | |
class BaseQueryList<T> { | |
reset(newList: any): void; | |
add(obj: any): void; | |
fireCallbacks(): void; | |
onChange(callback: any): void; | |
removeCallback(callback: any): void; | |
length: void; | |
first: void; | |
last: void; | |
} | |
class AppProtoView { | |
elementBinders: List<ElementBinder>; | |
protoLocals: Map<string, any>; | |
render: RenderProtoViewRef; | |
protoChangeDetector: ProtoChangeDetector; | |
variableBindings: Map<string, string>; | |
variableLocations: Map<string, number>; | |
bindElement(parent: ElementBinder, distanceToParent: int, protoElementInjector: ProtoElementInjector, componentDirective?: DirectiveBinding): ElementBinder; | |
/** | |
* Adds an event binding for the last created ElementBinder via bindElement. | |
* | |
* | |
* | |
* If the directive index is a positive integer, the event is evaluated in the context of | |
* | |
* the given directive. | |
* | |
* | |
* | |
* If the directive index is -1, the event is evaluated in the context of the enclosing view. | |
* | |
* | |
* | |
* @param {string} eventName | |
* | |
* @param {AST} expression | |
* | |
* @param {int} directiveIndex The directive index in the binder or -1 when the event is not bound | |
* | |
* to a directive | |
*/ | |
bindEvent(eventBindings: List<EventBinding>, boundElementIndex: number, directiveIndex?: int): void; | |
} | |
/** | |
* Cost of making objects: http://jsperf.com/instantiate-size-of-object | |
*/ | |
class AppView implements ChangeDispatcher, EventDispatcher { | |
render: RenderViewRef; | |
rootElementInjectors: List<ElementInjector>; | |
elementInjectors: List<ElementInjector>; | |
changeDetector: ChangeDetector; | |
componentChildViews: List<AppView>; | |
viewContainers: List<AppViewContainer>; | |
preBuiltObjects: List<PreBuiltObjects>; | |
elementRefs: List<ElementRef>; | |
ref: ViewRef; | |
/** | |
* The context against which data-binding expressions in this view are evaluated against. | |
* | |
* This is always a component instance. | |
*/ | |
context: any; | |
/** | |
* Variables, local to this view, that can be used in binding expressions (in addition to the | |
* | |
* context). This is used for thing like `<video #player>` or | |
* | |
* `<li template="for #item of items">`, where "player" and "item" are locals, respectively. | |
*/ | |
locals: Locals; | |
renderer: Renderer; | |
proto: AppProtoView; | |
init(changeDetector: ChangeDetector, elementInjectors: List<ElementInjector>, rootElementInjectors: List<ElementInjector>, preBuiltObjects: List<PreBuiltObjects>, componentChildViews: List<AppView>): void; | |
setLocal(contextName: string, value: any): void; | |
hydrated(): boolean; | |
/** | |
* Triggers the event handlers for the element and the directives. | |
* | |
* | |
* | |
* This method is intended to be called from directive EventEmitters. | |
* | |
* | |
* | |
* @param {string} eventName | |
* | |
* @param {*} eventObj | |
* | |
* @param {int} binderIndex | |
*/ | |
triggerEventHandlers(eventName: string, eventObj: any, binderIndex: int): void; | |
notifyOnBinding(b: BindingRecord, currentValue: any): void; | |
notifyOnAllChangesDone(): void; | |
getDirectiveFor(directive: DirectiveIndex): any; | |
getDetectorFor(directive: DirectiveIndex): any; | |
invokeElementMethod(elementIndex: number, methodName: string, args: List<any>): void; | |
dispatchEvent(elementIndex: number, eventName: string, locals: Map<string, any>): boolean; | |
} | |
class AppViewContainer { | |
views: List<AppView>; | |
} | |
class DehydratedException extends BaseException { | |
} | |
class ExpressionChangedAfterItHasBeenChecked extends BaseException { | |
} | |
class ChangeDetectionError extends BaseException { | |
location: string; | |
} | |
/** | |
* Interface used by Angular to control the change detection strategy for an application. | |
* | |
* | |
* | |
* Angular implements the following change detection strategies by default: | |
* | |
* | |
* | |
* - <a href='/angular2/angular2.api/DynamicChangeDetection'><code>DynamicChangeDetection</code></a>: slower, but does not require `eval()`. | |
* | |
* - <a href='/angular2/angular2.api/JitChangeDetection'><code>JitChangeDetection</code></a>: faster, but requires `eval()`. | |
* | |
* | |
* | |
* In JavaScript, you should always use `JitChangeDetection`, unless you are in an environment that | |
* | |
* has | |
* | |
* [CSP](https://developer.mozilla.org/en-US/docs/Web/Security/CSP), such as a Chrome Extension. | |
* | |
* | |
* | |
* In Dart, use `DynamicChangeDetection` during development. The Angular transformer generates an | |
* | |
* analog to the | |
* | |
* `JitChangeDetection` strategy at compile time. | |
* | |
* | |
* | |
* | |
* | |
* See: <a href='/angular2/angular2.api/DynamicChangeDetection'><code>DynamicChangeDetection</code></a>, <a href='/angular2/angular2.api/JitChangeDetection'><code>JitChangeDetection</code></a>, | |
* | |
* <a href='/angular2/angular2.api/PreGeneratedChangeDetection'><code>PreGeneratedChangeDetection</code></a> | |
* | |
* | |
* | |
* # Example | |
* | |
* ```javascript | |
* | |
* bootstrap(MyApp, [bind(ChangeDetection).toClass(DynamicChangeDetection)]); | |
* | |
* ``` | |
* | |
* @exportedAs angular2/change_detection | |
*/ | |
class ChangeDetection { | |
createProtoChangeDetector(definition: ChangeDetectorDefinition): ProtoChangeDetector; | |
} | |
/** | |
* ON_PUSH means that the change detector's mode will be set to CHECK_ONCE during hydration. | |
*/ | |
var ON_PUSH; | |
/** | |
* DEFAULT means that the change detector's mode will be set to CHECK_ALWAYS during hydration. | |
*/ | |
var DEFAULT; | |
/** | |
* Controls change detection. | |
* | |
* | |
* | |
* <a href='/angular2/angular2.api/ChangeDetectorRef'><code>ChangeDetectorRef</code></a> allows requesting checks for detectors that rely on observables. It | |
* | |
* also allows detaching and | |
* | |
* attaching change detector subtrees. | |
* | |
* | |
* | |
* @exportedAs angular2/change_detection | |
*/ | |
class ChangeDetectorRef { | |
/** | |
* Request to check all ON_PUSH ancestors. | |
*/ | |
requestCheck(): void; | |
/** | |
* Detaches the change detector from the change detector tree. | |
* | |
* | |
* | |
* The detached change detector will not be checked until it is reattached. | |
*/ | |
detach(): void; | |
/** | |
* Reattach the change detector to the change detector tree. | |
* | |
* | |
* | |
* This also requests a check of this change detector. This reattached change detector will be | |
* | |
* checked during the | |
* | |
* next change detection run. | |
*/ | |
reattach(): void; | |
} | |
class PipeRegistry { | |
config: void; | |
get(type: string, obj: any, cdRef?: ChangeDetectorRef, existingPipe?: Pipe): Pipe; | |
} | |
/** | |
* Indicates that the result of a <a href='/angular2/angular2.api/Pipe'><code>Pipe</code></a> transformation has changed even though the reference | |
* | |
* has not changed. | |
* | |
* | |
* | |
* The wrapped value will be unwrapped by change detection, and the unwrapped value will be stored. | |
* | |
* | |
* | |
* @exportedAs angular2/pipes | |
*/ | |
class WrappedValue { | |
wrapped: any; | |
} | |
/** | |
* An interface for extending the list of pipes known to Angular. | |
* | |
* | |
* | |
* If you are writing a custom <a href='/angular2/angular2.api/Pipe'><code>Pipe</code></a>, you must extend this interface. | |
* | |
* | |
* | |
* #Example | |
* | |
* | |
* | |
* ``` | |
* | |
* class DoublePipe implements Pipe { | |
* | |
* supports(obj) { | |
* | |
* return true; | |
* | |
* } | |
* | |
* | |
* | |
* onDestroy() {} | |
* | |
* | |
* | |
* transform(value, args = []) { | |
* | |
* return `${value}${value}`; | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/pipes | |
*/ | |
interface Pipe { | |
supports(obj: any): boolean; | |
onDestroy(): void; | |
transform(value: any, args: List<any>): any; | |
} | |
interface PipeFactory { | |
supports(obs: any): boolean; | |
create(cdRef: ChangeDetectorRef): Pipe; | |
} | |
/** | |
* @exportedAs angular2/pipes | |
*/ | |
class NullPipe extends BasePipe { | |
called: boolean; | |
supports(obj: any): boolean; | |
transform(value: any, args?: List<any>): WrappedValue; | |
} | |
/** | |
* @exportedAs angular2/pipes | |
*/ | |
class NullPipeFactory implements PipeFactory { | |
supports(obj: any): boolean; | |
create(cdRef: ChangeDetectorRef): Pipe; | |
} | |
var defaultPipes; | |
/** | |
* Implements change detection that does not require `eval()`. | |
* | |
* | |
* | |
* This is slower than <a href='/angular2/angular2.api/JitChangeDetection'><code>JitChangeDetection</code></a>. | |
* | |
* | |
* | |
* @exportedAs angular2/change_detection | |
*/ | |
class DynamicChangeDetection extends ChangeDetection { | |
registry: PipeRegistry; | |
createProtoChangeDetector(definition: ChangeDetectorDefinition): ProtoChangeDetector; | |
} | |
/** | |
* Implements faster change detection by generating source code. | |
* | |
* | |
* | |
* This requires `eval()`. For change detection that does not require `eval()`, see | |
* | |
* <a href='/angular2/angular2.api/DynamicChangeDetection'><code>DynamicChangeDetection</code></a> and <a href='/angular2/angular2.api/PreGeneratedChangeDetection'><code>PreGeneratedChangeDetection</code></a>. | |
* | |
* | |
* | |
* @exportedAs angular2/change_detection | |
*/ | |
class JitChangeDetection extends ChangeDetection { | |
registry: PipeRegistry; | |
createProtoChangeDetector(definition: ChangeDetectorDefinition): ProtoChangeDetector; | |
} | |
/** | |
* Implements change detection using a map of pregenerated proto detectors. | |
* | |
* | |
* | |
* @exportedAs angular2/change_detection | |
*/ | |
class PreGeneratedChangeDetection extends ChangeDetection { | |
registry: PipeRegistry; | |
createProtoChangeDetector(definition: ChangeDetectorDefinition): ProtoChangeDetector; | |
} | |
/** | |
* Map from <a href='/angular2/angular2.api/ChangeDetectorDefinition#id'><code>ChangeDetectorDefinition</code></a> to a factory method which takes a | |
* | |
* <a href='/angular2/angular2.api/PipeRegistry'><code>PipeRegistry</code></a> and a <a href='/angular2/angular2.api/ChangeDetectorDefinition'><code>ChangeDetectorDefinition</code></a> and generates a | |
* | |
* <a href='/angular2/angular2.api/ProtoChangeDetector'><code>ProtoChangeDetector</code></a> associated with the definition. | |
*/ | |
var preGeneratedProtoDetectors : StringMap<string, Function> ; | |
var defaultPipeRegistry : PipeRegistry ; | |
class DirectiveIndex { | |
elementIndex: number; | |
directiveIndex: number; | |
name: void; | |
} | |
class BindingRecord { | |
mode: string; | |
implicitReceiver: any; | |
ast: AST; | |
elementIndex: number; | |
propertyName: string; | |
propertyUnit: string; | |
setter: SetterFn; | |
lifecycleEvent: string; | |
directiveRecord: DirectiveRecord; | |
callOnChange(): boolean; | |
isOnPushChangeDetection(): boolean; | |
isDirective(): boolean; | |
isDirectiveLifecycle(): boolean; | |
isElementProperty(): boolean; | |
isElementAttribute(): boolean; | |
isElementClass(): boolean; | |
isElementStyle(): boolean; | |
isTextNode(): boolean; | |
} | |
interface ProtoChangeDetector { | |
instantiate(dispatcher: any): ChangeDetector; | |
} | |
interface ChangeDispatcher { | |
notifyOnBinding(bindingRecord: BindingRecord, value: any): void; | |
notifyOnAllChangesDone(): void; | |
} | |
interface ChangeDetector { | |
parent: ChangeDetector; | |
mode: string; | |
addChild(cd: ChangeDetector): void; | |
addShadowDomChild(cd: ChangeDetector): void; | |
removeChild(cd: ChangeDetector): void; | |
removeShadowDomChild(cd: ChangeDetector): void; | |
remove(): void; | |
hydrate(context: any, locals: Locals, directives: any): void; | |
dehydrate(): void; | |
markPathToRootAsCheckOnce(): void; | |
detectChanges(): void; | |
checkNoChanges(): void; | |
} | |
class Locals { | |
parent: Locals; | |
current: Map<any, any>; | |
contains(name: string): boolean; | |
get(name: string): any; | |
set(name: string, value: any): void; | |
clearValues(): void; | |
} | |
class ChangeDetectorDefinition { | |
id: string; | |
strategy: string; | |
variableNames: List<string>; | |
bindingRecords: List<BindingRecord>; | |
directiveRecords: List<DirectiveRecord>; | |
} | |
/** | |
* Provides default implementation of supports and onDestroy. | |
* | |
* | |
* | |
* #Example | |
* | |
* | |
* | |
* ``` | |
* | |
* class DoublePipe extends BasePipe {* | |
* | |
* transform(value) { | |
* | |
* return `${value}${value}`; | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
*/ | |
class BasePipe implements Pipe { | |
supports(obj: any): boolean; | |
onDestroy(): void; | |
transform(value: any, args: List<any>): any; | |
} | |
class DirectiveRecord { | |
directiveIndex: DirectiveIndex; | |
callOnAllChangesDone: boolean; | |
callOnChange: boolean; | |
callOnCheck: boolean; | |
callOnInit: boolean; | |
changeDetection: string; | |
isOnPushChangeDetection(): boolean; | |
} | |
var Inject; | |
var Optional; | |
/** | |
* Allows to refer to references which are not yet defined. | |
* | |
* | |
* | |
* This situation arises when the key which we need te refer to for the purposes of DI is declared, | |
* | |
* but not yet defined. | |
* | |
* | |
* | |
* ## Example: | |
* | |
* | |
* | |
* ``` | |
* | |
* class Door { | |
* | |
* // Incorrect way to refer to a reference which is defined later. | |
* | |
* // This fails because `Lock` is undefined at this point. | |
* | |
* constructor(lock:Lock) { } | |
* | |
* | |
* | |
* // Correct way to refer to a reference which is defined later. | |
* | |
* // The reference needs to be captured in a closure. | |
* | |
* constructor(@Inject(forwardRef(() => Lock)) lock:Lock) { } | |
* | |
* } | |
* | |
* | |
* | |
* // Only at this point the lock is defined. | |
* | |
* class Lock { | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/di | |
*/ | |
function forwardRef(forwardRefFn: ForwardRefFn) : Type ; | |
/** | |
* Lazily retrieve the reference value. | |
* | |
* | |
* | |
* See: <a href='/angular2/angular2.api/forwardRef'><code>forwardRef</code></a> | |
* | |
* | |
* | |
* @exportedAs angular2/di | |
*/ | |
function resolveForwardRef(type: any) : any ; | |
interface ForwardRefFn { | |
(): any; | |
} | |
/** | |
* A dependency injection container used for resolving dependencies. | |
* | |
* | |
* | |
* An `Injector` is a replacement for a `new` operator, which can automatically resolve the | |
* | |
* constructor dependencies. | |
* | |
* In typical use, application code asks for the dependencies in the constructor and they are | |
* | |
* resolved by the `Injector`. | |
* | |
* | |
* | |
* ## Example: | |
* | |
* | |
* | |
* Suppose that we want to inject an `Engine` into class `Car`, we would define it like this: | |
* | |
* | |
* | |
* ```javascript | |
* | |
* class Engine { | |
* | |
* } | |
* | |
* | |
* | |
* class Car { | |
* | |
* constructor(@Inject(Engine) engine) { | |
* | |
* } | |
* | |
* } | |
* | |
* | |
* | |
* ``` | |
* | |
* | |
* | |
* Next we need to write the code that creates and instantiates the `Injector`. We then ask for the | |
* | |
* `root` object, `Car`, so that the `Injector` can recursively build all of that object's | |
* | |
* dependencies. | |
* | |
* | |
* | |
* ```javascript | |
* | |
* main() { | |
* | |
* var injector = Injector.resolveAndCreate([Car, Engine]); | |
* | |
* | |
* | |
* // Get a reference to the `root` object, which will recursively instantiate the tree. | |
* | |
* var car = injector.get(Car); | |
* | |
* } | |
* | |
* ``` | |
* | |
* Notice that we don't use the `new` operator because we explicitly want to have the `Injector` | |
* | |
* resolve all of the object's dependencies automatically. | |
* | |
* | |
* | |
* @exportedAs angular2/di | |
*/ | |
class Injector { | |
/** | |
* Retrieves an instance from the injector. | |
* | |
* | |
* | |
* @param `token`: usually the `Type` of an object. (Same as the token used while setting up a | |
* | |
* binding). | |
* | |
* @returns an instance represented by the token. Throws if not found. | |
*/ | |
get(token: any): any; | |
/** | |
* Retrieves an instance from the injector. | |
* | |
* | |
* | |
* @param `token`: usually a `Type`. (Same as the token used while setting up a binding). | |
* | |
* @returns an instance represented by the token. Returns `null` if not found. | |
*/ | |
getOptional(token: any): any; | |
/** | |
* Retrieves an instance from the injector. | |
* | |
* | |
* | |
* @param `index`: index of an instance. | |
* | |
* @returns an instance represented by the index. Throws if not found. | |
*/ | |
getAt(index: number): any; | |
/** | |
* Direct parent of this injector. | |
*/ | |
parent: Injector; | |
/** | |
* Internal. Do not use. | |
* | |
* | |
* | |
* We return `any` not to export the InjectorStrategy type. | |
*/ | |
internalStrategy: any; | |
/** | |
* Creates a child injector and loads a new set of bindings into it. | |
* | |
* | |
* | |
* A resolution is a process of flattening multiple nested lists and converting individual | |
* | |
* bindings into a list of <a href='/angular2/angular2.api/ResolvedBinding'><code>ResolvedBinding</code></a>s. The resolution can be cached by `resolve` | |
* | |
* for the <a href='/angular2/angular2.api/Injector'><code>Injector</code></a> for performance-sensitive code. | |
* | |
* | |
* | |
* @param `bindings` can be a list of `Type`, <a href='/angular2/angular2.api/Binding'><code>Binding</code></a>, <a href='/angular2/angular2.api/ResolvedBinding'><code>ResolvedBinding</code></a>, or a | |
* | |
* recursive list of more bindings. | |
* | |
* @param `depProvider` | |
*/ | |
resolveAndCreateChild(bindings: List<Type | Binding | List<any>>, depProvider?: DependencyProvider): Injector; | |
/** | |
* Creates a child injector and loads a new set of <a href='/angular2/angular2.api/ResolvedBinding'><code>ResolvedBinding</code></a>s into it. | |
* | |
* | |
* | |
* @param `bindings`: A sparse list of <a href='/angular2/angular2.api/ResolvedBinding'><code>ResolvedBinding</code></a>s. | |
* | |
* See `resolve` for the <a href='/angular2/angular2.api/Injector'><code>Injector</code></a>. | |
* | |
* @param `depProvider` | |
* | |
* @returns a new child <a href='/angular2/angular2.api/Injector'><code>Injector</code></a>. | |
*/ | |
createChildFromResolved(bindings: List<ResolvedBinding>, depProvider?: DependencyProvider): Injector; | |
} | |
class ProtoInjector { | |
distanceToParent: number; | |
getBindingAtIndex(index: number): any; | |
} | |
/** | |
* Describes how the <a href='/angular2/angular2.api/Injector'><code>Injector</code></a> should instantiate a given token. | |
* | |
* | |
* | |
* See <a href='/angular2/angular2.api/bind'><code>bind</code></a>. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* ```javascript | |
* | |
* var injector = Injector.resolveAndCreate([ | |
* | |
* new Binding(String, { toValue: 'Hello' }) | |
* | |
* ]); | |
* | |
* | |
* | |
* expect(injector.get(String)).toEqual('Hello'); | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/di | |
*/ | |
class Binding { | |
/** | |
* Token used when retrieving this binding. Usually the `Type`. | |
*/ | |
token: void; | |
/** | |
* Binds an interface to an implementation / subclass. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* Becuse `toAlias` and `toClass` are often confused, the example contains both use cases for easy | |
* | |
* comparison. | |
* | |
* | |
* | |
* ```javascript | |
* | |
* | |
* | |
* class Vehicle {} | |
* | |
* | |
* | |
* class Car extends Vehicle {} | |
* | |
* | |
* | |
* var injectorClass = Injector.resolveAndCreate([ | |
* | |
* Car, | |
* | |
* new Binding(Vehicle, { toClass: Car }) | |
* | |
* ]); | |
* | |
* var injectorAlias = Injector.resolveAndCreate([ | |
* | |
* Car, | |
* | |
* new Binding(Vehicle, { toAlias: Car }) | |
* | |
* ]); | |
* | |
* | |
* | |
* expect(injectorClass.get(Vehicle)).not.toBe(injectorClass.get(Car)); | |
* | |
* expect(injectorClass.get(Vehicle) instanceof Car).toBe(true); | |
* | |
* | |
* | |
* expect(injectorAlias.get(Vehicle)).toBe(injectorAlias.get(Car)); | |
* | |
* expect(injectorAlias.get(Vehicle) instanceof Car).toBe(true); | |
* | |
* ``` | |
*/ | |
toClass: Type; | |
/** | |
* Binds a key to a value. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* ```javascript | |
* | |
* var injector = Injector.resolveAndCreate([ | |
* | |
* new Binding(String, { toValue: 'Hello' }) | |
* | |
* ]); | |
* | |
* | |
* | |
* expect(injector.get(String)).toEqual('Hello'); | |
* | |
* ``` | |
*/ | |
toValue: void; | |
/** | |
* Binds a key to the alias for an existing key. | |
* | |
* | |
* | |
* An alias means that <a href='/angular2/angular2.api/Injector'><code>Injector</code></a> returns the same instance as if the alias token was used. | |
* | |
* This is in contrast to `toClass` where a separate instance of `toClass` is returned. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* Becuse `toAlias` and `toClass` are often confused the example contains both use cases for easy | |
* | |
* comparison. | |
* | |
* | |
* | |
* ```javascript | |
* | |
* | |
* | |
* class Vehicle {} | |
* | |
* | |
* | |
* class Car extends Vehicle {} | |
* | |
* | |
* | |
* var injectorAlias = Injector.resolveAndCreate([ | |
* | |
* Car, | |
* | |
* new Binding(Vehicle, { toAlias: Car }) | |
* | |
* ]); | |
* | |
* var injectorClass = Injector.resolveAndCreate([ | |
* | |
* Car, | |
* | |
* new Binding(Vehicle, { toClass: Car }) | |
* | |
* ]); | |
* | |
* | |
* | |
* expect(injectorAlias.get(Vehicle)).toBe(injectorAlias.get(Car)); | |
* | |
* expect(injectorAlias.get(Vehicle) instanceof Car).toBe(true); | |
* | |
* | |
* | |
* expect(injectorClass.get(Vehicle)).not.toBe(injectorClass.get(Car)); | |
* | |
* expect(injectorClass.get(Vehicle) instanceof Car).toBe(true); | |
* | |
* ``` | |
*/ | |
toAlias: void; | |
/** | |
* Binds a key to a function which computes the value. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* ```javascript | |
* | |
* var injector = Injector.resolveAndCreate([ | |
* | |
* new Binding(Number, { toFactory: () => { return 1+2; }}), | |
* | |
* new Binding(String, { toFactory: (value) => { return "Value: " + value; }, | |
* | |
* dependencies: [Number] }) | |
* | |
* ]); | |
* | |
* | |
* | |
* expect(injector.get(Number)).toEqual(3); | |
* | |
* expect(injector.get(String)).toEqual('Value: 3'); | |
* | |
* ``` | |
*/ | |
toFactory: Function; | |
/** | |
* Used in conjunction with `toFactory` and specifies a set of dependencies | |
* | |
* (as `token`s) which should be injected into the factory function. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* ```javascript | |
* | |
* var injector = Injector.resolveAndCreate([ | |
* | |
* new Binding(Number, { toFactory: () => { return 1+2; }}), | |
* | |
* new Binding(String, { toFactory: (value) => { return "Value: " + value; }, | |
* | |
* dependencies: [Number] }) | |
* | |
* ]); | |
* | |
* | |
* | |
* expect(injector.get(Number)).toEqual(3); | |
* | |
* expect(injector.get(String)).toEqual('Value: 3'); | |
* | |
* ``` | |
*/ | |
dependencies: List<any>; | |
/** | |
* Converts the <a href='/angular2/angular2.api/Binding'><code>Binding</code></a> into <a href='/angular2/angular2.api/ResolvedBinding'><code>ResolvedBinding</code></a>. | |
* | |
* | |
* | |
* <a href='/angular2/angular2.api/Injector'><code>Injector</code></a> internally only uses <a href='/angular2/angular2.api/ResolvedBinding'><code>ResolvedBinding</code></a>, <a href='/angular2/angular2.api/Binding'><code>Binding</code></a> contains | |
* | |
* convenience binding syntax. | |
*/ | |
resolve(): ResolvedBinding; | |
} | |
/** | |
* Provides an API for imperatively constructing <a href='/angular2/angular2.api/Binding'><code>Binding</code></a>s. | |
* | |
* | |
* | |
* This is only relevant for JavaScript. See <a href='/angular2/angular2.api/BindingBuilder'><code>BindingBuilder</code></a>. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* ```javascript | |
* | |
* bind(MyInterface).toClass(MyClass) | |
* | |
* | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/di | |
*/ | |
function bind(token: any) : BindingBuilder ; | |
/** | |
* A unique object used for retrieving items from the <a href='/angular2/angular2.api/Injector'><code>Injector</code></a>. | |
* | |
* | |
* | |
* Keys have: | |
* | |
* - a system-wide unique `id`. | |
* | |
* - a `token`, usually the `Type` of the instance. | |
* | |
* | |
* | |
* Keys are used internally by the <a href='/angular2/angular2.api/Injector'><code>Injector</code></a> because their system-wide unique `id`s allow the | |
* | |
* injector to index in arrays rather than looking up items in maps. | |
* | |
* | |
* | |
* @exportedAs angular2/di | |
*/ | |
class Key { | |
token: Object; | |
id: number; | |
displayName: string; | |
} | |
/** | |
* Thrown when trying to retrieve a dependency by `Key` from <a href='/angular2/angular2.api/Injector'><code>Injector</code></a>, but the | |
* | |
* <a href='/angular2/angular2.api/Injector'><code>Injector</code></a> does not have a <a href='/angular2/angular2.api/Binding'><code>Binding</code></a> for <a href='/angular2/angular2.api/Key'><code>Key</code></a>. | |
* | |
* | |
* | |
* @exportedAs angular2/di_errors | |
*/ | |
class NoBindingError extends AbstractBindingError { | |
} | |
/** | |
* Base class for all errors arising from misconfigured bindings. | |
* | |
* | |
* | |
* @exportedAs angular2/di_errors | |
*/ | |
class AbstractBindingError extends BaseException { | |
name: string; | |
message: string; | |
keys: List<any>; | |
constructResolvingMessage: Function; | |
addKey(key: any): void; | |
toString(): string; | |
} | |
/** | |
* Thrown when trying to retrieve an async <a href='/angular2/angular2.api/Binding'><code>Binding</code></a> using the sync API. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* ```javascript | |
* | |
* var injector = Injector.resolveAndCreate([ | |
* | |
* bind(Number).toAsyncFactory(() => { | |
* | |
* return new Promise((resolve) => resolve(1 + 2)); | |
* | |
* }), | |
* | |
* bind(String).toFactory((v) => { return "Value: " + v; }, [String]) | |
* | |
* ]); | |
* | |
* | |
* | |
* injector.asyncGet(String).then((v) => expect(v).toBe('Value: 3')); | |
* | |
* expect(() => { | |
* | |
* injector.get(String); | |
* | |
* }).toThrowError(AsycBindingError); | |
* | |
* ``` | |
* | |
* | |
* | |
* The above example throws because `String` depends on `Number` which is async. If any binding in | |
* | |
* the dependency graph is async then the graph can only be retrieved using the `asyncGet` API. | |
* | |
* | |
* | |
* @exportedAs angular2/di_errors | |
*/ | |
class AsyncBindingError extends AbstractBindingError { | |
} | |
/** | |
* Thrown when dependencies form a cycle. | |
* | |
* | |
* | |
* ## Example: | |
* | |
* | |
* | |
* ```javascript | |
* | |
* class A { | |
* | |
* constructor(b:B) {} | |
* | |
* } | |
* | |
* class B { | |
* | |
* constructor(a:A) {} | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* Retrieving `A` or `B` throws a `CyclicDependencyError` as the graph above cannot be constructed. | |
* | |
* | |
* | |
* @exportedAs angular2/di_errors | |
*/ | |
class CyclicDependencyError extends AbstractBindingError { | |
} | |
/** | |
* Thrown when a constructing type returns with an Error. | |
* | |
* | |
* | |
* The `InstantiationError` class contains the original error plus the dependency graph which caused | |
* | |
* this object to be instantiated. | |
* | |
* | |
* | |
* @exportedAs angular2/di_errors | |
*/ | |
class InstantiationError extends AbstractBindingError { | |
causeKey: void; | |
} | |
/** | |
* Thrown when an object other then <a href='/angular2/angular2.api/Binding'><code>Binding</code></a> (or `Type`) is passed to <a href='/angular2/angular2.api/Injector'><code>Injector</code></a> | |
* | |
* creation. | |
* | |
* | |
* | |
* @exportedAs angular2/di_errors | |
*/ | |
class InvalidBindingError extends BaseException { | |
message: string; | |
toString(): string; | |
} | |
/** | |
* Thrown when the class has no annotation information. | |
* | |
* | |
* | |
* Lack of annotation information prevents the <a href='/angular2/angular2.api/Injector'><code>Injector</code></a> from determining which dependencies | |
* | |
* need to be injected into the constructor. | |
* | |
* | |
* | |
* @exportedAs angular2/di_errors | |
*/ | |
class NoAnnotationError extends BaseException { | |
name: string; | |
message: string; | |
toString(): string; | |
} | |
/** | |
* @exportedAs angular2/di | |
*/ | |
class OpaqueToken { | |
toString(): string; | |
} | |
/** | |
* An internal resolved representation of a <a href='/angular2/angular2.api/Binding'><code>Binding</code></a> used by the <a href='/angular2/angular2.api/Injector'><code>Injector</code></a>. | |
* | |
* | |
* | |
* A <a href='/angular2/angular2.api/Binding'><code>Binding</code></a> is resolved when it has a factory function. Binding to a class, alias, or | |
* | |
* value, are just convenience methods, as <a href='/angular2/angular2.api/Injector'><code>Injector</code></a> only operates on calling factory | |
* | |
* functions. | |
* | |
* | |
* | |
* @exportedAs angular2/di | |
*/ | |
class ResolvedBinding { | |
/** | |
* A key, usually a `Type`. | |
*/ | |
key: Key; | |
/** | |
* Factory function which can return an instance of an object represented by a key. | |
*/ | |
factory: Function; | |
/** | |
* Arguments (dependencies) to the `factory` function. | |
*/ | |
dependencies: List<Dependency>; | |
} | |
/** | |
* Helper class for the <a href='/angular2/angular2.api/bind'><code>bind</code></a> function. | |
* | |
* | |
* | |
* @exportedAs angular2/di | |
*/ | |
class BindingBuilder { | |
token: void; | |
/** | |
* Binds an interface to an implementation / subclass. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* Because `toAlias` and `toClass` are often confused, the example contains both use cases for | |
* | |
* easy comparison. | |
* | |
* | |
* | |
* ```javascript | |
* | |
* | |
* | |
* class Vehicle {} | |
* | |
* | |
* | |
* class Car extends Vehicle {} | |
* | |
* | |
* | |
* var injectorClass = Injector.resolveAndCreate([ | |
* | |
* Car, | |
* | |
* bind(Vehicle).toClass(Car) | |
* | |
* ]); | |
* | |
* var injectorAlias = Injector.resolveAndCreate([ | |
* | |
* Car, | |
* | |
* bind(Vehicle).toAlias(Car) | |
* | |
* ]); | |
* | |
* | |
* | |
* expect(injectorClass.get(Vehicle)).not.toBe(injectorClass.get(Car)); | |
* | |
* expect(injectorClass.get(Vehicle) instanceof Car).toBe(true); | |
* | |
* | |
* | |
* expect(injectorAlias.get(Vehicle)).toBe(injectorAlias.get(Car)); | |
* | |
* expect(injectorAlias.get(Vehicle) instanceof Car).toBe(true); | |
* | |
* ``` | |
*/ | |
toClass(type: Type): Binding; | |
/** | |
* Binds a key to a value. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* ```javascript | |
* | |
* var injector = Injector.resolveAndCreate([ | |
* | |
* bind(String).toValue('Hello') | |
* | |
* ]); | |
* | |
* | |
* | |
* expect(injector.get(String)).toEqual('Hello'); | |
* | |
* ``` | |
*/ | |
toValue(value: any): Binding; | |
/** | |
* Binds a key to the alias for an existing key. | |
* | |
* | |
* | |
* An alias means that we will return the same instance as if the alias token was used. (This is | |
* | |
* in contrast to `toClass` where a separet instance of `toClass` will be returned.) | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* Becuse `toAlias` and `toClass` are often confused, the example contains both use cases for easy | |
* | |
* comparison. | |
* | |
* | |
* | |
* ```javascript | |
* | |
* | |
* | |
* class Vehicle {} | |
* | |
* | |
* | |
* class Car extends Vehicle {} | |
* | |
* | |
* | |
* var injectorAlias = Injector.resolveAndCreate([ | |
* | |
* Car, | |
* | |
* bind(Vehicle).toAlias(Car) | |
* | |
* ]); | |
* | |
* var injectorClass = Injector.resolveAndCreate([ | |
* | |
* Car, | |
* | |
* bind(Vehicle).toClass(Car) | |
* | |
* ]); | |
* | |
* | |
* | |
* expect(injectorAlias.get(Vehicle)).toBe(injectorAlias.get(Car)); | |
* | |
* expect(injectorAlias.get(Vehicle) instanceof Car).toBe(true); | |
* | |
* | |
* | |
* expect(injectorClass.get(Vehicle)).not.toBe(injectorClass.get(Car)); | |
* | |
* expect(injectorClass.get(Vehicle) instanceof Car).toBe(true); | |
* | |
* ``` | |
*/ | |
toAlias(aliasToken: any): Binding; | |
/** | |
* Binds a key to a function which computes the value. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* ```javascript | |
* | |
* var injector = Injector.resolveAndCreate([ | |
* | |
* bind(Number).toFactory(() => { return 1+2; }), | |
* | |
* bind(String).toFactory((v) => { return "Value: " + v; }, [Number]) | |
* | |
* ]); | |
* | |
* | |
* | |
* expect(injector.get(Number)).toEqual(3); | |
* | |
* expect(injector.get(String)).toEqual('Value: 3'); | |
* | |
* ``` | |
*/ | |
toFactory(factoryFunction: Function, dependencies?: List<any>): Binding; | |
} | |
/** | |
* @private | |
*/ | |
class Dependency { | |
key: Key; | |
optional: boolean; | |
visibility: Visibility; | |
properties: List<any>; | |
} | |
var Self; | |
var Parent; | |
var Ancestor; | |
var Unbounded; | |
/** | |
* Used to provide dependencies that cannot be easily expressed as bindings. | |
*/ | |
interface DependencyProvider { | |
getDependency(injector: Injector, binding: ResolvedBinding, dependency: Dependency): any; | |
} | |
/** | |
* Omitting from external API doc as this is really an abstract internal concept. | |
*/ | |
class AbstractControl { | |
validator: Function; | |
value: any; | |
status: string; | |
valid: boolean; | |
errors: StringMap<string, any>; | |
pristine: boolean; | |
dirty: boolean; | |
touched: boolean; | |
untouched: boolean; | |
valueChanges: Observable; | |
markAsTouched(): void; | |
markAsDirty({onlySelf}?: {onlySelf?: boolean}): void; | |
setParent(parent: any): void; | |
updateValidity({onlySelf}?: {onlySelf?: boolean}): void; | |
updateValueAndValidity({onlySelf, emitEvent}?: {onlySelf?: boolean, | |
emitEvent?: boolean}): void; | |
find(path: List<string | number>| string): AbstractControl; | |
getError(errorCode: string, path?: List<string>): any; | |
hasError(errorCode: string, path?: List<string>): boolean; | |
} | |
/** | |
* Defines a part of a form that cannot be divided into other controls. | |
* | |
* | |
* | |
* `Control` is one of the three fundamental building blocks used to define forms in Angular, along | |
* | |
* with | |
* | |
* <a href='/angular2/angular2.api/ControlGroup'><code>ControlGroup</code></a> and <a href='/angular2/angular2.api/ControlArray'><code>ControlArray</code></a>. | |
* | |
* | |
* | |
* @exportedAs angular2/forms | |
*/ | |
class Control extends AbstractControl { | |
updateValue(value: any, {onlySelf, emitEvent}?: {onlySelf?: boolean, emitEvent?: boolean}): void; | |
registerOnChange(fn: Function): void; | |
} | |
/** | |
* Defines a part of a form, of fixed length, that can contain other controls. | |
* | |
* | |
* | |
* A ControlGroup aggregates the values and errors of each <a href='/angular2/angular2.api/Control'><code>Control</code></a> in the group. Thus, if | |
* | |
* one of the controls | |
* | |
* in a group is invalid, the entire group is invalid. Similarly, if a control changes its value, | |
* | |
* the entire group | |
* | |
* changes as well. | |
* | |
* | |
* | |
* `ControlGroup` is one of the three fundamental building blocks used to define forms in Angular, | |
* | |
* along with | |
* | |
* <a href='/angular2/angular2.api/Control'><code>Control</code></a> and <a href='/angular2/angular2.api/ControlArray'><code>ControlArray</code></a>. <a href='/angular2/angular2.api/ControlArray'><code>ControlArray</code></a> can also contain other controls, | |
* | |
* but is of variable | |
* | |
* length. | |
* | |
* | |
* | |
* @exportedAs angular2/forms | |
*/ | |
class ControlGroup extends AbstractControl { | |
controls: StringMap<string, AbstractControl>; | |
addControl(name: string, c: AbstractControl): void; | |
removeControl(name: string): void; | |
include(controlName: string): void; | |
exclude(controlName: string): void; | |
contains(controlName: string): boolean; | |
} | |
/** | |
* Defines a part of a form, of variable length, that can contain other controls. | |
* | |
* | |
* | |
* A `ControlArray` aggregates the values and errors of each <a href='/angular2/angular2.api/Control'><code>Control</code></a> in the group. Thus, if | |
* | |
* one of the controls | |
* | |
* in a group is invalid, the entire group is invalid. Similarly, if a control changes its value, | |
* | |
* the entire group | |
* | |
* changes as well. | |
* | |
* | |
* | |
* `ControlArray` is one of the three fundamental building blocks used to define forms in Angular, | |
* | |
* along with | |
* | |
* <a href='/angular2/angular2.api/Control'><code>Control</code></a> and <a href='/angular2/angular2.api/ControlGroup'><code>ControlGroup</code></a>. <a href='/angular2/angular2.api/ControlGroup'><code>ControlGroup</code></a> can also contain other controls, | |
* | |
* but is of fixed | |
* | |
* length. | |
* | |
* | |
* | |
* @exportedAs angular2/forms | |
*/ | |
class ControlArray extends AbstractControl { | |
controls: List<AbstractControl>; | |
at(index: number): AbstractControl; | |
push(control: AbstractControl): void; | |
insert(index: number, control: AbstractControl): void; | |
removeAt(index: number): void; | |
length: number; | |
} | |
/** | |
* Creates and binds a control with a specified name to a DOM element. | |
* | |
* | |
* | |
* This directive can only be used as a child of <a href='/angular2/angular2.api/NgForm'><code>NgForm</code></a> or <a href='/angular2/angular2.api/NgFormModel'><code>NgFormModel</code></a>. | |
* | |
* | |
* | |
* # Example | |
* | |
* | |
* | |
* In this example, we create the login and password controls. | |
* | |
* We can work with each control separately: check its validity, get its value, listen to its | |
* | |
* changes. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Component({selector: "login-comp"}) | |
* | |
* @View({ | |
* | |
* directives: [formDirectives], | |
* | |
* template: ` | |
* | |
* <form #f="form" (submit)='onLogIn(f.value)'> | |
* | |
* Login <input type='text' ng-control='login' #l="form"> | |
* | |
* <div *ng-if="!l.valid">Login is invalid</div> | |
* | |
* | |
* | |
* Password <input type='password' ng-control='password'> | |
* | |
* | |
* | |
* <button type='submit'>Log in!</button> | |
* | |
* </form> | |
* | |
* `}) | |
* | |
* class LoginComp { | |
* | |
* onLogIn(value) { | |
* | |
* // value === {login: 'some login', password: 'some password'} | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* We can also use ng-model to bind a domain model to the form. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Component({selector: "login-comp"}) | |
* | |
* @View({ | |
* | |
* directives: [formDirectives], | |
* | |
* template: ` | |
* | |
* <form (submit)='onLogIn()'> | |
* | |
* Login <input type='text' ng-control='login' [(ng-model)]="credentials.login"> | |
* | |
* Password <input type='password' ng-control='password' | |
* | |
* [(ng-model)]="credentials.password"> | |
* | |
* <button type='submit'>Log in!</button> | |
* | |
* </form> | |
* | |
* `}) | |
* | |
* class LoginComp { | |
* | |
* credentials: {login:string, password:string}; | |
* | |
* | |
* | |
* onLogIn() { | |
* | |
* // this.credentials.login === "some login" | |
* | |
* // this.credentials.password === "some password" | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/forms | |
*/ | |
class NgControlName extends NgControl { | |
update: void; | |
model: any; | |
ngValidators: QueryList<NgValidator>; | |
onChange(c: StringMap<string, any>): void; | |
onDestroy(): void; | |
viewToModelUpdate(newValue: any): void; | |
path: List<string>; | |
formDirective: any; | |
control: Control; | |
validator: Function; | |
} | |
/** | |
* Binds an existing control to a DOM element. | |
* | |
* | |
* | |
* # Example | |
* | |
* | |
* | |
* In this example, we bind the control to an input element. When the value of the input element | |
* | |
* changes, the value of | |
* | |
* the control will reflect that change. Likewise, if the value of the control changes, the input | |
* | |
* element reflects that | |
* | |
* change. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Component({selector: "login-comp"}) | |
* | |
* @View({ | |
* | |
* directives: [formDirectives], | |
* | |
* template: "<input type='text' [ng-form-control]='loginControl'>" | |
* | |
* }) | |
* | |
* class LoginComp { | |
* | |
* loginControl:Control; | |
* | |
* | |
* | |
* constructor() { | |
* | |
* this.loginControl = new Control(''); | |
* | |
* } | |
* | |
* } | |
* | |
* | |
* | |
* ``` | |
* | |
* | |
* | |
* We can also use ng-model to bind a domain model to the form. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Component({selector: "login-comp"}) | |
* | |
* @View({ | |
* | |
* directives: [formDirectives], | |
* | |
* template: "<input type='text' [ng-form-control]='loginControl' [(ng-model)]='login'>" | |
* | |
* }) | |
* | |
* class LoginComp { | |
* | |
* loginControl:Control; | |
* | |
* login:string; | |
* | |
* | |
* | |
* constructor() { | |
* | |
* this.loginControl = new Control(''); | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/forms | |
*/ | |
class NgFormControl extends NgControl { | |
form: Control; | |
update: void; | |
model: any; | |
ngValidators: QueryList<NgValidator>; | |
onChange(c: any): void; | |
path: List<string>; | |
control: Control; | |
validator: Function; | |
viewToModelUpdate(newValue: any): void; | |
} | |
/** | |
* Binds a domain model to the form. | |
* | |
* | |
* | |
* # Example | |
* | |
* ``` | |
* | |
* @Component({selector: "search-comp"}) | |
* | |
* @View({ | |
* | |
* directives: [formDirectives], | |
* | |
* template: ` | |
* | |
* <input type='text' [(ng-model)]="searchQuery"> | |
* | |
* `}) | |
* | |
* class SearchComp { | |
* | |
* searchQuery: string; | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/forms | |
*/ | |
class NgModel extends NgControl { | |
update: void; | |
model: any; | |
ngValidators: QueryList<NgValidator>; | |
onChange(c: any): void; | |
control: Control; | |
path: List<string>; | |
validator: Function; | |
viewToModelUpdate(newValue: any): void; | |
} | |
/** | |
* An abstract class that all control directive extend. | |
* | |
* | |
* | |
* It binds a <a href='/angular2/angular2.api/Control'><code>Control</code></a> object to a DOM element. | |
* | |
* | |
* | |
* @exportedAs angular2/forms | |
*/ | |
class NgControl { | |
name: string; | |
valueAccessor: ControlValueAccessor; | |
validator: Function; | |
path: List<string>; | |
control: Control; | |
viewToModelUpdate(newValue: any): void; | |
} | |
/** | |
* Creates and binds a control group to a DOM element. | |
* | |
* | |
* | |
* This directive can only be used as a child of <a href='/angular2/angular2.api/NgForm'><code>NgForm</code></a> or <a href='/angular2/angular2.api/NgFormModel'><code>NgFormModel</code></a>. | |
* | |
* | |
* | |
* # Example | |
* | |
* | |
* | |
* In this example, we create the credentials and personal control groups. | |
* | |
* We can work with each group separately: check its validity, get its value, listen to its changes. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Component({selector: "signup-comp"}) | |
* | |
* @View({ | |
* | |
* directives: [formDirectives], | |
* | |
* template: ` | |
* | |
* <form #f="form" (submit)='onSignUp(f.value)'> | |
* | |
* <div ng-control-group='credentials' #credentials="form"> | |
* | |
* Login <input type='text' ng-control='login'> | |
* | |
* Password <input type='password' ng-control='password'> | |
* | |
* </div> | |
* | |
* <div *ng-if="!credentials.valid">Credentials are invalid</div> | |
* | |
* | |
* | |
* <div ng-control-group='personal'> | |
* | |
* Name <input type='text' ng-control='name'> | |
* | |
* </div> | |
* | |
* <button type='submit'>Sign Up!</button> | |
* | |
* </form> | |
* | |
* `}) | |
* | |
* class SignupComp { | |
* | |
* onSignUp(value) { | |
* | |
* // value === {personal: {name: 'some name'}, | |
* | |
* // credentials: {login: 'some login', password: 'some password'}} | |
* | |
* } | |
* | |
* } | |
* | |
* | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/forms | |
*/ | |
class NgControlGroup extends ControlContainer { | |
onInit(): void; | |
onDestroy(): void; | |
path: List<string>; | |
formDirective: any; | |
} | |
/** | |
* Binds an existing control group to a DOM element. | |
* | |
* | |
* | |
* # Example | |
* | |
* | |
* | |
* In this example, we bind the control group to the form element, and we bind the login and | |
* | |
* password controls to the | |
* | |
* login and password elements. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Component({selector: "login-comp"}) | |
* | |
* @View({ | |
* | |
* directives: [formDirectives], | |
* | |
* template: "<form [ng-form-model]='loginForm'>" + | |
* | |
* "Login <input type='text' ng-control='login'>" + | |
* | |
* "Password <input type='password' ng-control='password'>" + | |
* | |
* "<button (click)="onLogin()">Login</button>" + | |
* | |
* "</form>" | |
* | |
* }) | |
* | |
* class LoginComp { | |
* | |
* loginForm:ControlGroup; | |
* | |
* | |
* | |
* constructor() { | |
* | |
* this.loginForm = new ControlGroup({ | |
* | |
* login: new Control(""), | |
* | |
* password: new Control("") | |
* | |
* }); | |
* | |
* } | |
* | |
* | |
* | |
* onLogin() { | |
* | |
* // this.loginForm.value | |
* | |
* } | |
* | |
* } | |
* | |
* | |
* | |
* ``` | |
* | |
* | |
* | |
* We can also use ng-model to bind a domain model to the form. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Component({selector: "login-comp"}) | |
* | |
* @View({ | |
* | |
* directives: [formDirectives], | |
* | |
* template: "<form [ng-form-model]='loginForm'>" + | |
* | |
* "Login <input type='text' ng-control='login' [(ng-model)]='login'>" + | |
* | |
* "Password <input type='password' ng-control='password' [(ng-model)]='password'>" + | |
* | |
* "<button (click)="onLogin()">Login</button>" + | |
* | |
* "</form>" | |
* | |
* }) | |
* | |
* class LoginComp { | |
* | |
* credentials:{login:string, password:string} | |
* | |
* loginForm:ControlGroup; | |
* | |
* | |
* | |
* constructor() { | |
* | |
* this.loginForm = new ControlGroup({ | |
* | |
* login: new Control(""), | |
* | |
* password: new Control("") | |
* | |
* }); | |
* | |
* } | |
* | |
* | |
* | |
* onLogin() { | |
* | |
* // this.credentials.login === 'some login' | |
* | |
* // this.credentials.password === 'some password' | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/forms | |
*/ | |
class NgFormModel extends ControlContainer implements Form { | |
form: ControlGroup; | |
directives: List<NgControl>; | |
ngSubmit: void; | |
onChange(_: any): void; | |
formDirective: Form; | |
path: List<string>; | |
addControl(dir: NgControl): void; | |
getControl(dir: NgControl): Control; | |
removeControl(dir: NgControl): void; | |
addControlGroup(dir: NgControlGroup): void; | |
removeControlGroup(dir: NgControlGroup): void; | |
updateModel(dir: NgControl, value: any): void; | |
onSubmit(): boolean; | |
} | |
/** | |
* Creates and binds a form object to a DOM element. | |
* | |
* | |
* | |
* # Example | |
* | |
* | |
* | |
* ``` | |
* | |
* @Component({selector: "signup-comp"}) | |
* | |
* @View({ | |
* | |
* directives: [formDirectives], | |
* | |
* template: ` | |
* | |
* <form #f="form" (submit)='onSignUp(f.value)'> | |
* | |
* <div ng-control-group='credentials' #credentials="form"> | |
* | |
* Login <input type='text' ng-control='login'> | |
* | |
* Password <input type='password' ng-control='password'> | |
* | |
* </div> | |
* | |
* <div *ng-if="!credentials.valid">Credentials are invalid</div> | |
* | |
* | |
* | |
* <div ng-control-group='personal'> | |
* | |
* Name <input type='text' ng-control='name'> | |
* | |
* </div> | |
* | |
* <button type='submit'>Sign Up!</button> | |
* | |
* </form> | |
* | |
* `}) | |
* | |
* class SignupComp { | |
* | |
* onSignUp(value) { | |
* | |
* // value === {personal: {name: 'some name'}, | |
* | |
* // credentials: {login: 'some login', password: 'some password'}} | |
* | |
* } | |
* | |
* } | |
* | |
* | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/forms | |
*/ | |
class NgForm extends ControlContainer implements Form { | |
form: ControlGroup; | |
ngSubmit: void; | |
formDirective: Form; | |
path: List<string>; | |
controls: StringMap<string, AbstractControl>; | |
value: any; | |
errors: any; | |
addControl(dir: NgControl): void; | |
getControl(dir: NgControl): Control; | |
removeControl(dir: NgControl): void; | |
addControlGroup(dir: NgControlGroup): void; | |
removeControlGroup(dir: NgControlGroup): void; | |
updateModel(dir: NgControl, value: any): void; | |
onSubmit(): boolean; | |
} | |
/** | |
* A bridge between a control and a native element. | |
* | |
* | |
* | |
* Please see <a href='/angular2/angular2.api/DefaultValueAccessor'><code>DefaultValueAccessor</code></a> for more information. | |
*/ | |
interface ControlValueAccessor { | |
writeValue(obj: any): void; | |
registerOnChange(fn: any): void; | |
registerOnTouched(fn: any): void; | |
} | |
/** | |
* The default accessor for writing a value and listening to changes that is used by the | |
* | |
* <a href='/angular2/angular2.api/NgModel'><code>NgModel</code></a>, <a href='/angular2/angular2.api/NgFormControl'><code>NgFormControl</code></a>, and <a href='/angular2/angular2.api/NgControlName'><code>NgControlName</code></a> directives. | |
* | |
* | |
* | |
* # Example | |
* | |
* ``` | |
* | |
* <input type="text" [(ng-model)]="searchQuery"> | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/forms | |
*/ | |
class DefaultValueAccessor implements ControlValueAccessor { | |
value: string; | |
onChange: void; | |
onTouched: void; | |
cd: NgControl; | |
renderer: Renderer; | |
elementRef: ElementRef; | |
writeValue(value: any): void; | |
ngClassUntouched: boolean; | |
ngClassTouched: boolean; | |
ngClassPristine: boolean; | |
ngClassDirty: boolean; | |
ngClassValid: boolean; | |
ngClassInvalid: boolean; | |
registerOnChange(fn: any): void; | |
registerOnTouched(fn: any): void; | |
} | |
/** | |
* The accessor for writing a value and listening to changes on a checkbox input element. | |
* | |
* | |
* | |
* # Example | |
* | |
* ``` | |
* | |
* <input type="checkbox" [ng-control]="rememberLogin"> | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/forms | |
*/ | |
class CheckboxControlValueAccessor implements ControlValueAccessor { | |
checked: boolean; | |
onChange: void; | |
onTouched: void; | |
cd: NgControl; | |
renderer: Renderer; | |
elementRef: ElementRef; | |
writeValue(value: any): void; | |
ngClassUntouched: boolean; | |
ngClassTouched: boolean; | |
ngClassPristine: boolean; | |
ngClassDirty: boolean; | |
ngClassValid: boolean; | |
ngClassInvalid: boolean; | |
registerOnChange(fn: any): void; | |
registerOnTouched(fn: any): void; | |
} | |
/** | |
* The accessor for writing a value and listening to changes on a select element. | |
* | |
* | |
* | |
* @exportedAs angular2/forms | |
*/ | |
class SelectControlValueAccessor implements ControlValueAccessor { | |
value: void; | |
onChange: void; | |
onTouched: void; | |
cd: NgControl; | |
renderer: Renderer; | |
elementRef: ElementRef; | |
writeValue(value: any): void; | |
ngClassUntouched: boolean; | |
ngClassTouched: boolean; | |
ngClassPristine: boolean; | |
ngClassDirty: boolean; | |
ngClassValid: boolean; | |
ngClassInvalid: boolean; | |
registerOnChange(fn: any): void; | |
registerOnTouched(fn: any): void; | |
} | |
/** | |
* A list of all the form directives used as part of a `@View` annotation. | |
* | |
* | |
* | |
* This is a shorthand for importing them each individually. | |
* | |
* | |
* | |
* @exportedAs angular2/forms | |
*/ | |
var formDirectives : List<Type> ; | |
/** | |
* Provides a set of validators used by form controls. | |
* | |
* | |
* | |
* # Example | |
* | |
* | |
* | |
* ``` | |
* | |
* var loginControl = new Control("", Validators.required) | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/forms | |
*/ | |
class Validators { | |
} | |
class NgValidator { | |
validator: Function; | |
} | |
class NgRequiredValidator extends NgValidator { | |
validator: Function; | |
} | |
/** | |
* Creates a form object from a user-specified configuration. | |
* | |
* | |
* | |
* # Example | |
* | |
* | |
* | |
* ``` | |
* | |
* import {Component, View, bootstrap} from 'angular2/angular2'; | |
* | |
* import {FormBuilder, Validators, formDirectives, ControlGroup} from 'angular2/forms'; | |
* | |
* | |
* | |
* @Component({ | |
* | |
* selector: 'login-comp', | |
* | |
* viewInjector: [ | |
* | |
* FormBuilder | |
* | |
* ] | |
* | |
* }) | |
* | |
* @View({ | |
* | |
* template: ` | |
* | |
* <form [control-group]="loginForm"> | |
* | |
* Login <input control="login"> | |
* | |
* | |
* | |
* <div control-group="passwordRetry"> | |
* | |
* Password <input type="password" control="password"> | |
* | |
* Confirm password <input type="password" control="passwordConfirmation"> | |
* | |
* </div> | |
* | |
* </form> | |
* | |
* `, | |
* | |
* directives: [ | |
* | |
* formDirectives | |
* | |
* ] | |
* | |
* }) | |
* | |
* class LoginComp { | |
* | |
* loginForm: ControlGroup; | |
* | |
* | |
* | |
* constructor(builder: FormBuilder) { | |
* | |
* this.loginForm = builder.group({ | |
* | |
* login: ["", Validators.required], | |
* | |
* | |
* | |
* passwordRetry: builder.group({ | |
* | |
* password: ["", Validators.required], | |
* | |
* passwordConfirmation: ["", Validators.required] | |
* | |
* }) | |
* | |
* }); | |
* | |
* } | |
* | |
* } | |
* | |
* | |
* | |
* bootstrap(LoginComp) | |
* | |
* ``` | |
* | |
* | |
* | |
* This example creates a <a href='/angular2/angular2.api/ControlGroup'><code>ControlGroup</code></a> that consists of a `login` <a href='/angular2/angular2.api/Control'><code>Control</code></a>, and a | |
* | |
* nested | |
* | |
* <a href='/angular2/angular2.api/ControlGroup'><code>ControlGroup</code></a> that defines a `password` and a `passwordConfirmation` <a href='/angular2/angular2.api/Control'><code>Control</code></a>: | |
* | |
* | |
* | |
* ``` | |
* | |
* var loginForm = builder.group({ | |
* | |
* login: ["", Validators.required], | |
* | |
* | |
* | |
* passwordRetry: builder.group({ | |
* | |
* password: ["", Validators.required], | |
* | |
* passwordConfirmation: ["", Validators.required] | |
* | |
* }) | |
* | |
* }); | |
* | |
* | |
* | |
* ``` | |
* | |
* @exportedAs angular2/forms | |
*/ | |
class FormBuilder { | |
group(controlsConfig: StringMap<string, any>, extra?: StringMap<string, any>): ControlGroup; | |
control(value: Object, validator?: Function): Control; | |
array(controlsConfig: List<any>, validator?: Function): ControlArray; | |
} | |
var formInjectables : List<Type> ; | |
class DomRenderer extends Renderer { | |
createRootHostView(hostProtoViewRef: RenderProtoViewRef, hostElementSelector: string): RenderViewRef; | |
createView(protoViewRef: RenderProtoViewRef): RenderViewRef; | |
destroyView(view: RenderViewRef): void; | |
getNativeElementSync(location: RenderElementRef): any; | |
attachComponentView(location: RenderElementRef, componentViewRef: RenderViewRef): void; | |
setComponentViewRootNodes(componentViewRef: RenderViewRef, rootNodes: List</*node*/ any>): void; | |
getRootNodes(viewRef: RenderViewRef): List</*node*/ any>; | |
detachComponentView(location: RenderElementRef, componentViewRef: RenderViewRef): void; | |
attachViewInContainer(location: RenderElementRef, atIndex: number, viewRef: RenderViewRef): void; | |
detachViewInContainer(location: RenderElementRef, atIndex: number, viewRef: RenderViewRef): void; | |
hydrateView(viewRef: RenderViewRef): void; | |
dehydrateView(viewRef: RenderViewRef): void; | |
setElementProperty(location: RenderElementRef, propertyName: string, propertyValue: any): void; | |
setElementAttribute(location: RenderElementRef, attributeName: string, attributeValue: string): void; | |
setElementClass(location: RenderElementRef, className: string, isAdd: boolean): void; | |
setElementStyle(location: RenderElementRef, styleName: string, styleValue: string): void; | |
invokeElementMethod(location: RenderElementRef, methodName: string, args: List<any>): void; | |
setText(viewRef: RenderViewRef, textNodeIndex: number, text: string): void; | |
setEventDispatcher(viewRef: RenderViewRef, dispatcher: any): void; | |
} | |
var DOCUMENT_TOKEN; | |
/** | |
* Declare reusable UI building blocks for an application. | |
* | |
* | |
* | |
* Each Angular component requires a single `@Component` and at least one `@View` annotation. The | |
* | |
* `@Component` | |
* | |
* annotation specifies when a component is instantiated, and which properties and hostListeners it | |
* | |
* binds to. | |
* | |
* | |
* | |
* When a component is instantiated, Angular | |
* | |
* - creates a shadow DOM for the component. | |
* | |
* - loads the selected template into the shadow DOM. | |
* | |
* - creates all the injectable objects configured with `hostInjector` and `viewInjector`. | |
* | |
* | |
* | |
* All template expressions and statements are then evaluated against the component instance. | |
* | |
* | |
* | |
* For details on the `@View` annotation, see <a href='/angular2/angular2.api/View'><code>View</code></a>. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* ``` | |
* | |
* @Component({ | |
* | |
* selector: 'greet' | |
* | |
* }) | |
* | |
* @View({ | |
* | |
* template: 'Hello {{name}}!' | |
* | |
* }) | |
* | |
* class Greet { | |
* | |
* name: string; | |
* | |
* | |
* | |
* constructor() { | |
* | |
* this.name = 'World'; | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* | |
* | |
* @exportedAs angular2/annotations | |
*/ | |
class ComponentAnnotation extends DirectiveAnnotation { | |
/** | |
* Defines the used change detection strategy. | |
* | |
* | |
* | |
* When a component is instantiated, Angular creates a change detector, which is responsible for | |
* | |
* propagating | |
* | |
* the component's bindings. | |
* | |
* | |
* | |
* The `changeDetection` property defines, whether the change detection will be checked every time | |
* | |
* or only when the component | |
* | |
* tells it to do so. | |
*/ | |
changeDetection: string; | |
/** | |
* Defines the set of injectable objects that are visible to its view dom children. | |
* | |
* | |
* | |
* ## Simple Example | |
* | |
* | |
* | |
* Here is an example of a class that can be injected: | |
* | |
* | |
* | |
* ``` | |
* | |
* class Greeter { | |
* | |
* greet(name:string) { | |
* | |
* return 'Hello ' + name + '!'; | |
* | |
* } | |
* | |
* } | |
* | |
* | |
* | |
* @Directive({ | |
* | |
* selector: 'needs-greeter' | |
* | |
* }) | |
* | |
* class NeedsGreeter { | |
* | |
* greeter:Greeter; | |
* | |
* | |
* | |
* constructor(greeter:Greeter) { | |
* | |
* this.greeter = greeter; | |
* | |
* } | |
* | |
* } | |
* | |
* | |
* | |
* @Component({ | |
* | |
* selector: 'greet', | |
* | |
* viewInjector: [ | |
* | |
* Greeter | |
* | |
* ] | |
* | |
* }) | |
* | |
* @View({ | |
* | |
* template: `<needs-greeter></needs-greeter>`, | |
* | |
* directives: [NeedsGreeter] | |
* | |
* }) | |
* | |
* class HelloWorld { | |
* | |
* } | |
* | |
* | |
* | |
* ``` | |
*/ | |
viewInjector: List<any>; | |
} | |
/** | |
* Directives allow you to attach behavior to elements in the DOM. | |
* | |
* | |
* | |
* <a href='/angular2/angular2.api/Directive'><code>Directive</code></a>s with an embedded view are called <a href='/angular2/angular2.api/Component'><code>Component</code></a>s. | |
* | |
* | |
* | |
* A directive consists of a single directive annotation and a controller class. When the | |
* | |
* directive's `selector` matches | |
* | |
* elements in the DOM, the following steps occur: | |
* | |
* | |
* | |
* 1. For each directive, the `ElementInjector` attempts to resolve the directive's constructor | |
* | |
* arguments. | |
* | |
* 2. Angular instantiates directives for each matched element using `ElementInjector` in a | |
* | |
* depth-first order, | |
* | |
* as declared in the HTML. | |
* | |
* | |
* | |
* ## Understanding How Injection Works | |
* | |
* | |
* | |
* There are three stages of injection resolution. | |
* | |
* - *Pre-existing Injectors*: | |
* | |
* - The terminal <a href='/angular2/angular2.api/Injector'><code>Injector</code></a> cannot resolve dependencies. It either throws an error or, if | |
* | |
* the dependency was | |
* | |
* specified as `@Optional`, returns `null`. | |
* | |
* - The platform injector resolves browser singleton resources, such as: cookies, title, | |
* | |
* location, and others. | |
* | |
* - *Component Injectors*: Each component instance has its own <a href='/angular2/angular2.api/Injector'><code>Injector</code></a>, and they follow | |
* | |
* the same parent-child hierarchy | |
* | |
* as the component instances in the DOM. | |
* | |
* - *Element Injectors*: Each component instance has a Shadow DOM. Within the Shadow DOM each | |
* | |
* element has an `ElementInjector` | |
* | |
* which follow the same parent-child hierarchy as the DOM elements themselves. | |
* | |
* | |
* | |
* When a template is instantiated, it also must instantiate the corresponding directives in a | |
* | |
* depth-first order. The | |
* | |
* current `ElementInjector` resolves the constructor dependencies for each directive. | |
* | |
* | |
* | |
* Angular then resolves dependencies as follows, according to the order in which they appear in the | |
* | |
* <a href='/angular2/angular2.api/View'><code>View</code></a>: | |
* | |
* | |
* | |
* 1. Dependencies on the current element | |
* | |
* 2. Dependencies on element injectors and their parents until it encounters a Shadow DOM boundary | |
* | |
* 3. Dependencies on component injectors and their parents until it encounters the root component | |
* | |
* 4. Dependencies on pre-existing injectors | |
* | |
* | |
* | |
* | |
* | |
* The `ElementInjector` can inject other directives, element-specific special objects, or it can | |
* | |
* delegate to the parent | |
* | |
* injector. | |
* | |
* | |
* | |
* To inject other directives, declare the constructor parameter as: | |
* | |
* - `directive:DirectiveType`: a directive on the current element only | |
* | |
* - `@Ancestor() directive:DirectiveType`: any directive that matches the type between the current | |
* | |
* element and the | |
* | |
* Shadow DOM root. Current element is not included in the resolution, therefore even if it could | |
* | |
* resolve it, it will | |
* | |
* be ignored. | |
* | |
* - `@Parent() directive:DirectiveType`: any directive that matches the type on a direct parent | |
* | |
* element only. | |
* | |
* - `@Query(DirectiveType) query:QueryList<DirectiveType>`: A live collection of direct child | |
* | |
* directives. | |
* | |
* - `@QueryDescendants(DirectiveType) query:QueryList<DirectiveType>`: A live collection of any | |
* | |
* child directives. | |
* | |
* | |
* | |
* To inject element-specific special objects, declare the constructor parameter as: | |
* | |
* - `element: ElementRef` to obtain a reference to logical element in the view. | |
* | |
* - `viewContainer: ViewContainerRef` to control child template instantiation, for | |
* | |
* <a href='/angular2/angular2.api/Directive'><code>Directive</code></a> directives only | |
* | |
* - `bindingPropagation: BindingPropagation` to control change detection in a more granular way. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* The following example demonstrates how dependency injection resolves constructor arguments in | |
* | |
* practice. | |
* | |
* | |
* | |
* | |
* | |
* Assume this HTML template: | |
* | |
* | |
* | |
* ``` | |
* | |
* <div dependency="1"> | |
* | |
* <div dependency="2"> | |
* | |
* <div dependency="3" my-directive> | |
* | |
* <div dependency="4"> | |
* | |
* <div dependency="5"></div> | |
* | |
* </div> | |
* | |
* <div dependency="6"></div> | |
* | |
* </div> | |
* | |
* </div> | |
* | |
* </div> | |
* | |
* ``` | |
* | |
* | |
* | |
* With the following `dependency` decorator and `SomeService` injectable class. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Injectable() | |
* | |
* class SomeService { | |
* | |
* } | |
* | |
* | |
* | |
* @Directive({ | |
* | |
* selector: '[dependency]', | |
* | |
* properties: [ | |
* | |
* 'id: dependency' | |
* | |
* ] | |
* | |
* }) | |
* | |
* class Dependency { | |
* | |
* id:string; | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* Let's step through the different ways in which `MyDirective` could be declared... | |
* | |
* | |
* | |
* | |
* | |
* ### No injection | |
* | |
* | |
* | |
* Here the constructor is declared with no arguments, therefore nothing is injected into | |
* | |
* `MyDirective`. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ selector: '[my-directive]' }) | |
* | |
* class MyDirective { | |
* | |
* constructor() { | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* This directive would be instantiated with no dependencies. | |
* | |
* | |
* | |
* | |
* | |
* ### Component-level injection | |
* | |
* | |
* | |
* Directives can inject any injectable instance from the closest component injector or any of its | |
* | |
* parents. | |
* | |
* | |
* | |
* Here, the constructor declares a parameter, `someService`, and injects the `SomeService` type | |
* | |
* from the parent | |
* | |
* component's injector. | |
* | |
* ``` | |
* | |
* @Directive({ selector: '[my-directive]' }) | |
* | |
* class MyDirective { | |
* | |
* constructor(someService: SomeService) { | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* This directive would be instantiated with a dependency on `SomeService`. | |
* | |
* | |
* | |
* | |
* | |
* ### Injecting a directive from the current element | |
* | |
* | |
* | |
* Directives can inject other directives declared on the current element. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ selector: '[my-directive]' }) | |
* | |
* class MyDirective { | |
* | |
* constructor(dependency: Dependency) { | |
* | |
* expect(dependency.id).toEqual(3); | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* This directive would be instantiated with `Dependency` declared at the same element, in this case | |
* | |
* `dependency="3"`. | |
* | |
* | |
* | |
* | |
* | |
* ### Injecting a directive from a direct parent element | |
* | |
* | |
* | |
* Directives can inject other directives declared on a direct parent element. By definition, a | |
* | |
* directive with a | |
* | |
* `@Parent` annotation does not attempt to resolve dependencies for the current element, even if | |
* | |
* this would satisfy | |
* | |
* the dependency. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ selector: '[my-directive]' }) | |
* | |
* class MyDirective { | |
* | |
* constructor(@Parent() dependency: Dependency) { | |
* | |
* expect(dependency.id).toEqual(2); | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* This directive would be instantiated with `Dependency` declared at the parent element, in this | |
* | |
* case `dependency="2"`. | |
* | |
* | |
* | |
* | |
* | |
* ### Injecting a directive from any ancestor elements | |
* | |
* | |
* | |
* Directives can inject other directives declared on any ancestor element (in the current Shadow | |
* | |
* DOM), i.e. on the | |
* | |
* parent element and its parents. By definition, a directive with an `@Ancestor` annotation does | |
* | |
* not attempt to | |
* | |
* resolve dependencies for the current element, even if this would satisfy the dependency. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ selector: '[my-directive]' }) | |
* | |
* class MyDirective { | |
* | |
* constructor(@Ancestor() dependency: Dependency) { | |
* | |
* expect(dependency.id).toEqual(2); | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* Unlike the `@Parent` which only checks the parent, `@Ancestor` checks the parent, as well as its | |
* | |
* parents recursively. If `dependency="2"` didn't exist on the direct parent, this injection would | |
* | |
* have returned | |
* | |
* `dependency="1"`. | |
* | |
* | |
* | |
* | |
* | |
* ### Injecting a live collection of direct child directives | |
* | |
* | |
* | |
* | |
* | |
* A directive can also query for other child directives. Since parent directives are instantiated | |
* | |
* before child directives, a directive can't simply inject the list of child directives. Instead, | |
* | |
* the directive injects a <a href='/angular2/angular2.api/QueryList'><code>QueryList</code></a>, which updates its contents as children are added, | |
* | |
* removed, or moved by a directive that uses a <a href='/angular2/angular2.api/ViewContainerRef'><code>ViewContainerRef</code></a> such as a `ng-for`, an | |
* | |
* `ng-if`, or an `ng-switch`. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ selector: '[my-directive]' }) | |
* | |
* class MyDirective { | |
* | |
* constructor(@Query(Dependency) dependencies:QueryList<Dependency>) { | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* This directive would be instantiated with a <a href='/angular2/angular2.api/QueryList'><code>QueryList</code></a> which contains `Dependency` 4 and | |
* | |
* 6. Here, `Dependency` 5 would not be included, because it is not a direct child. | |
* | |
* | |
* | |
* ### Injecting a live collection of descendant directives | |
* | |
* | |
* | |
* By passing the descendant flag to `@Query` above, we can include the children of the child | |
* | |
* elements. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ selector: '[my-directive]' }) | |
* | |
* class MyDirective { | |
* | |
* constructor(@Query(Dependency, {descendants: true}) dependencies:QueryList<Dependency>) { | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* This directive would be instantiated with a Query which would contain `Dependency` 4, 5 and 6. | |
* | |
* | |
* | |
* ### Optional injection | |
* | |
* | |
* | |
* The normal behavior of directives is to return an error when a specified dependency cannot be | |
* | |
* resolved. If you | |
* | |
* would like to inject `null` on unresolved dependency instead, you can annotate that dependency | |
* | |
* with `@Optional()`. | |
* | |
* This explicitly permits the author of a template to treat some of the surrounding directives as | |
* | |
* optional. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ selector: '[my-directive]' }) | |
* | |
* class MyDirective { | |
* | |
* constructor(@Optional() dependency:Dependency) { | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* This directive would be instantiated with a `Dependency` directive found on the current element. | |
* | |
* If none can be | |
* | |
* found, the injector supplies `null` instead of throwing an error. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* Here we use a decorator directive to simply define basic tool-tip behavior. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ | |
* | |
* selector: '[tooltip]', | |
* | |
* properties: [ | |
* | |
* 'text: tooltip' | |
* | |
* ], | |
* | |
* hostListeners: { | |
* | |
* 'onmouseenter': 'onMouseEnter()', | |
* | |
* 'onmouseleave': 'onMouseLeave()' | |
* | |
* } | |
* | |
* }) | |
* | |
* class Tooltip{ | |
* | |
* text:string; | |
* | |
* overlay:Overlay; // NOT YET IMPLEMENTED | |
* | |
* overlayManager:OverlayManager; // NOT YET IMPLEMENTED | |
* | |
* | |
* | |
* constructor(overlayManager:OverlayManager) { | |
* | |
* this.overlay = overlay; | |
* | |
* } | |
* | |
* | |
* | |
* onMouseEnter() { | |
* | |
* // exact signature to be determined | |
* | |
* this.overlay = this.overlayManager.open(text, ...); | |
* | |
* } | |
* | |
* | |
* | |
* onMouseLeave() { | |
* | |
* this.overlay.close(); | |
* | |
* this.overlay = null; | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* In our HTML template, we can then add this behavior to a `<div>` or any other element with the | |
* | |
* `tooltip` selector, | |
* | |
* like so: | |
* | |
* | |
* | |
* ``` | |
* | |
* <div tooltip="some text here"></div> | |
* | |
* ``` | |
* | |
* | |
* | |
* Directives can also control the instantiation, destruction, and positioning of inline template | |
* | |
* elements: | |
* | |
* | |
* | |
* A directive uses a <a href='/angular2/angular2.api/ViewContainerRef'><code>ViewContainerRef</code></a> to instantiate, insert, move, and destroy views at | |
* | |
* runtime. | |
* | |
* The <a href='/angular2/angular2.api/ViewContainerRef'><code>ViewContainerRef</code></a> is created as a result of `<template>` element, and represents a | |
* | |
* location in the current view | |
* | |
* where these actions are performed. | |
* | |
* | |
* | |
* Views are always created as children of the current <a href='/angular2/angular2.api/View'><code>View</code></a>, and as siblings of the | |
* | |
* `<template>` element. Thus a | |
* | |
* directive in a child view cannot inject the directive that created it. | |
* | |
* | |
* | |
* Since directives that create views via ViewContainers are common in Angular, and using the full | |
* | |
* `<template>` element syntax is wordy, Angular | |
* | |
* also supports a shorthand notation: `<li *foo="bar">` and `<li template="foo: bar">` are | |
* | |
* equivalent. | |
* | |
* | |
* | |
* Thus, | |
* | |
* | |
* | |
* ``` | |
* | |
* <ul> | |
* | |
* <li *foo="bar" title="text"></li> | |
* | |
* </ul> | |
* | |
* ``` | |
* | |
* | |
* | |
* Expands in use to: | |
* | |
* | |
* | |
* ``` | |
* | |
* <ul> | |
* | |
* <template [foo]="bar"> | |
* | |
* <li title="text"></li> | |
* | |
* </template> | |
* | |
* </ul> | |
* | |
* ``` | |
* | |
* | |
* | |
* Notice that although the shorthand places `*foo="bar"` within the `<li>` element, the binding for | |
* | |
* the directive | |
* | |
* controller is correctly instantiated on the `<template>` element rather than the `<li>` element. | |
* | |
* | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* Let's suppose we want to implement the `unless` behavior, to conditionally include a template. | |
* | |
* | |
* | |
* Here is a simple directive that triggers on an `unless` selector: | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ | |
* | |
* selector: '[unless]', | |
* | |
* properties: ['unless'] | |
* | |
* }) | |
* | |
* export class Unless { | |
* | |
* viewContainer: ViewContainerRef; | |
* | |
* protoViewRef: ProtoViewRef; | |
* | |
* prevCondition: boolean; | |
* | |
* | |
* | |
* constructor(viewContainer: ViewContainerRef, protoViewRef: ProtoViewRef) { | |
* | |
* this.viewContainer = viewContainer; | |
* | |
* this.protoViewRef = protoViewRef; | |
* | |
* this.prevCondition = null; | |
* | |
* } | |
* | |
* | |
* | |
* set unless(newCondition) { | |
* | |
* if (newCondition && (isBlank(this.prevCondition) || !this.prevCondition)) { | |
* | |
* this.prevCondition = true; | |
* | |
* this.viewContainer.clear(); | |
* | |
* } else if (!newCondition && (isBlank(this.prevCondition) || this.prevCondition)) { | |
* | |
* this.prevCondition = false; | |
* | |
* this.viewContainer.create(this.protoViewRef); | |
* | |
* } | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* We can then use this `unless` selector in a template: | |
* | |
* ``` | |
* | |
* <ul> | |
* | |
* <li *unless="expr"></li> | |
* | |
* </ul> | |
* | |
* ``` | |
* | |
* | |
* | |
* Once the directive instantiates the child view, the shorthand notation for the template expands | |
* | |
* and the result is: | |
* | |
* | |
* | |
* ``` | |
* | |
* <ul> | |
* | |
* <template [unless]="exp"> | |
* | |
* <li></li> | |
* | |
* </template> | |
* | |
* <li></li> | |
* | |
* </ul> | |
* | |
* ``` | |
* | |
* | |
* | |
* Note also that although the `<li></li>` template still exists inside the `<template></template>`, | |
* | |
* the instantiated | |
* | |
* view occurs on the second `<li></li>` which is a sibling to the `<template>` element. | |
* | |
* | |
* | |
* @exportedAs angular2/annotations | |
*/ | |
class DirectiveAnnotation extends Injectable { | |
/** | |
* The CSS selector that triggers the instantiation of a directive. | |
* | |
* | |
* | |
* Angular only allows directives to trigger on CSS selectors that do not cross element | |
* | |
* boundaries. | |
* | |
* | |
* | |
* `selector` may be declared as one of the following: | |
* | |
* | |
* | |
* - `element-name`: select by element name. | |
* | |
* - `.class`: select by class name. | |
* | |
* - `[attribute]`: select by attribute name. | |
* | |
* - `[attribute=value]`: select by attribute name and value. | |
* | |
* - `:not(sub_selector)`: select only if the element does not match the `sub_selector`. | |
* | |
* - `selector1, selector2`: select if either `selector1` or `selector2` matches. | |
* | |
* | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* Suppose we have a directive with an `input[type=text]` selector. | |
* | |
* | |
* | |
* And the following HTML: | |
* | |
* | |
* | |
* ```html | |
* | |
* <form> | |
* | |
* <input type="text"> | |
* | |
* <input type="radio"> | |
* | |
* <form> | |
* | |
* ``` | |
* | |
* | |
* | |
* The directive would only be instantiated on the `<input type="text">` element. | |
*/ | |
selector: string; | |
/** | |
* Enumerates the set of properties that accept data binding for a directive. | |
* | |
* | |
* | |
* The `properties` property defines a set of `directiveProperty` to `bindingProperty` | |
* | |
* configuration: | |
* | |
* | |
* | |
* - `directiveProperty` specifies the component property where the value is written. | |
* | |
* - `bindingProperty` specifies the DOM property where the value is read from. | |
* | |
* | |
* | |
* You can include a <a href='/angular2/angular2.api/Pipe'><code>Pipe</code></a> when specifying a `bindingProperty` to allow for data | |
* | |
* transformation and structural change detection of the value. These pipes will be evaluated in | |
* | |
* the context of this component. | |
* | |
* | |
* | |
* ## Syntax | |
* | |
* | |
* | |
* There is no need to specify both `directiveProperty` and `bindingProperty` when they both have | |
* | |
* the same value. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ | |
* | |
* properties: [ | |
* | |
* 'propertyName', // shorthand notation for 'propertyName: propertyName' | |
* | |
* 'directiveProperty1: bindingProperty1', | |
* | |
* 'directiveProperty2: bindingProperty2 | pipe1 | ...', | |
* | |
* ... | |
* | |
* ] | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* | |
* | |
* ## Basic Property Binding | |
* | |
* | |
* | |
* We can easily build a simple `Tooltip` directive that exposes a `tooltip` property, which can | |
* | |
* be used in templates with standard Angular syntax. For example: | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ | |
* | |
* selector: '[tooltip]', | |
* | |
* properties: [ | |
* | |
* 'text: tooltip' | |
* | |
* ] | |
* | |
* }) | |
* | |
* class Tooltip { | |
* | |
* set text(value: string) { | |
* | |
* // This will get called every time with the new value when the 'tooltip' property changes | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* We can then bind to the `tooltip' property as either an expression (`someExpression`) or as a | |
* | |
* string literal, as shown in the HTML template below: | |
* | |
* | |
* | |
* ```html | |
* | |
* <div [tooltip]="someExpression">...</div> | |
* | |
* <div tooltip="Some Text">...</div> | |
* | |
* ``` | |
* | |
* | |
* | |
* Whenever the `someExpression` expression changes, the `properties` declaration instructs | |
* | |
* Angular to update the `Tooltip`'s `text` property. | |
* | |
* | |
* | |
* ## Bindings With Pipes | |
* | |
* | |
* | |
* You can also use pipes when writing binding definitions for a directive. | |
* | |
* | |
* | |
* For example, we could write a binding that updates the directive on structural changes, rather | |
* | |
* than on reference changes, as normally occurs in change detection. | |
* | |
* | |
* | |
* See <a href='/angular2/angular2.api/Pipe'><code>Pipe</code></a> and <a href='/angular2/pipes/KeyValueChanges'><code>KeyValueChanges</code></a> documentation for more details. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ | |
* | |
* selector: '[class-set]', | |
* | |
* properties: [ | |
* | |
* 'classChanges: classSet | keyValDiff' | |
* | |
* ] | |
* | |
* }) | |
* | |
* class ClassSet { | |
* | |
* set classChanges(changes: KeyValueChanges) { | |
* | |
* // This will get called every time the `class-set` expressions changes its structure. | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* The template that this directive is used in may also contain its own pipes. For example: | |
* | |
* | |
* | |
* ```html | |
* | |
* <div [class-set]="someExpression | somePipe"> | |
* | |
* ``` | |
* | |
* | |
* | |
* In this case, the two pipes compose as if they were inlined: `someExpression | somePipe | | |
* | |
* keyValDiff`. | |
*/ | |
properties: List<string>; | |
/** | |
* Enumerates the set of emitted events. | |
* | |
* | |
* | |
* ## Syntax | |
* | |
* | |
* | |
* ``` | |
* | |
* @Component({ | |
* | |
* events: ['statusChange'] | |
* | |
* }) | |
* | |
* class TaskComponent { | |
* | |
* statusChange: EventEmitter; | |
* | |
* | |
* | |
* constructor() { | |
* | |
* this.statusChange = new EventEmitter(); | |
* | |
* } | |
* | |
* | |
* | |
* onComplete() { | |
* | |
* this.statusChange.next('completed'); | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* Use `propertyName: eventName` when the event emitter property name is different from the name | |
* | |
* of the emitted event: | |
* | |
* | |
* | |
* ``` | |
* | |
* @Component({ | |
* | |
* events: ['status: statusChange'] | |
* | |
* }) | |
* | |
* class TaskComponent { | |
* | |
* status: EventEmitter; | |
* | |
* | |
* | |
* constructor() { | |
* | |
* this.status = new EventEmitter(); | |
* | |
* } | |
* | |
* | |
* | |
* onComplete() { | |
* | |
* this.status.next('completed'); | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
*/ | |
events: List<string>; | |
/** | |
* Specifiy the events, actions, properties and attributes related to the host element. | |
* | |
* | |
* | |
* ## Events | |
* | |
* | |
* | |
* Specifies which DOM hostListeners a directive listens to via a set of `(event)` to `method` | |
* | |
* key-value pairs: | |
* | |
* | |
* | |
* - `event1`: the DOM event that the directive listens to. | |
* | |
* - `statement`: the statement to execute when the event occurs. | |
* | |
* If the evalutation of the statement returns `false`, then `preventDefault`is applied on the DOM | |
* | |
* event. | |
* | |
* | |
* | |
* To listen to global events, a target must be added to the event name. | |
* | |
* The target can be `window`, `document` or `body`. | |
* | |
* | |
* | |
* When writing a directive event binding, you can also refer to the following local variables: | |
* | |
* - `$event`: Current event object which triggered the event. | |
* | |
* - `$target`: The source of the event. This will be either a DOM element or an Angular | |
* | |
* directive. (will be implemented in later release) | |
* | |
* | |
* | |
* ## Syntax | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ | |
* | |
* host: { | |
* | |
* '(event1)': 'onMethod1(arguments)', | |
* | |
* '(target:event2)': 'onMethod2(arguments)', | |
* | |
* ... | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* ## Basic Event Binding: | |
* | |
* | |
* | |
* Suppose you want to write a directive that reacts to `change` events in the DOM and on | |
* | |
* `resize` events in window. | |
* | |
* You would define the event binding as follows: | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ | |
* | |
* selector: 'input', | |
* | |
* host: { | |
* | |
* '(change)': 'onChange($event)', | |
* | |
* '(window:resize)': 'onResize($event)' | |
* | |
* } | |
* | |
* }) | |
* | |
* class InputDirective { | |
* | |
* onChange(event:Event) { | |
* | |
* // invoked when the input element fires the 'change' event | |
* | |
* } | |
* | |
* onResize(event:Event) { | |
* | |
* // invoked when the window fires the 'resize' event | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* ## Properties | |
* | |
* | |
* | |
* Specifies which DOM properties a directives updates. | |
* | |
* | |
* | |
* ## Syntax | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ | |
* | |
* selector: 'input', | |
* | |
* host: { | |
* | |
* '[prop]': 'expression' | |
* | |
* } | |
* | |
* }) | |
* | |
* class InputDirective { | |
* | |
* value:string; | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* In this example the prop property of the host element is updated with the expression value | |
* | |
* every time it changes. | |
* | |
* | |
* | |
* ## Attributes | |
* | |
* | |
* | |
* Specifies static attributes that should be propagated to a host element. Attributes specified | |
* | |
* in `hostAttributes` are propagated only if a given attribute is not present on a host element. | |
* | |
* | |
* | |
* ## Syntax | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ | |
* | |
* selector: '[my-button]', | |
* | |
* host: { | |
* | |
* 'role': 'button' | |
* | |
* } | |
* | |
* }) | |
* | |
* class MyButton { | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* In this example using `my-button` directive (ex.: `<div my-button></div>`) on a host element | |
* | |
* (here: `<div>` ) will ensure that this element will get the "button" role. | |
* | |
* | |
* | |
* ## Actions | |
* | |
* | |
* | |
* Specifies which DOM methods a directive can invoke. | |
* | |
* | |
* | |
* ## Syntax | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ | |
* | |
* selector: 'input', | |
* | |
* host: { | |
* | |
* '@emitFocus': 'focus()' | |
* | |
* } | |
* | |
* }) | |
* | |
* class InputDirective { | |
* | |
* constructor() { | |
* | |
* this.emitFocus = new EventEmitter(); | |
* | |
* } | |
* | |
* | |
* | |
* focus() { | |
* | |
* this.emitFocus.next(); | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* In this example calling focus on InputDirective will result in calling focus on the input. | |
*/ | |
host: StringMap<string, string>; | |
/** | |
* Specifies which lifecycle should be notified to the directive. | |
* | |
* | |
* | |
* See <a href='/angular2/angular2.api/LifecycleEvent'><code>LifecycleEvent</code></a> for details. | |
*/ | |
lifecycle: List<LifecycleEvent>; | |
/** | |
* If set to false the compiler does not compile the children of this directive. | |
*/ | |
compileChildren: boolean; | |
/** | |
* Defines the set of injectable objects that are visible to a Directive and its light dom | |
* | |
* children. | |
* | |
* | |
* | |
* ## Simple Example | |
* | |
* | |
* | |
* Here is an example of a class that can be injected: | |
* | |
* | |
* | |
* ``` | |
* | |
* class Greeter { | |
* | |
* greet(name:string) { | |
* | |
* return 'Hello ' + name + '!'; | |
* | |
* } | |
* | |
* } | |
* | |
* | |
* | |
* @Directive({ | |
* | |
* selector: 'greet', | |
* | |
* hostInjector: [ | |
* | |
* Greeter | |
* | |
* ] | |
* | |
* }) | |
* | |
* class HelloWorld { | |
* | |
* greeter:Greeter; | |
* | |
* | |
* | |
* constructor(greeter:Greeter) { | |
* | |
* this.greeter = greeter; | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
*/ | |
hostInjector: List<any>; | |
/** | |
* Defines the name that can be used in the template to assign this directive to a variable. | |
* | |
* | |
* | |
* ## Simple Example | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ | |
* | |
* selector: 'child-dir', | |
* | |
* exportAs: 'child' | |
* | |
* }) | |
* | |
* class ChildDir { | |
* | |
* } | |
* | |
* | |
* | |
* @Component({ | |
* | |
* selector: 'main', | |
* | |
* }) | |
* | |
* @View({ | |
* | |
* template: `<child-dir #c="child"></child-dir>`, | |
* | |
* directives: [ChildDir] | |
* | |
* }) | |
* | |
* class MainComponent { | |
* | |
* } | |
* | |
* | |
* | |
* ``` | |
*/ | |
exportAs: string; | |
} | |
/** | |
* Notify a directive whenever a <a href='/angular2/angular2.api/View'><code>View</code></a> that contains it is destroyed. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ | |
* | |
* ..., | |
* | |
* lifecycle: [onDestroy] | |
* | |
* }) | |
* | |
* class ClassSet { | |
* | |
* onDestroy() { | |
* | |
* // invoked to notify directive of the containing view destruction. | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* @exportedAs angular2/annotations | |
*/ | |
var onDestroy : LifecycleEvent ; | |
/** | |
* Notify a directive when any of its bindings have changed. | |
* | |
* | |
* | |
* This method is called right after the directive's bindings have been checked, | |
* | |
* and before any of its children's bindings have been checked. | |
* | |
* | |
* | |
* It is invoked only if at least one of the directive's bindings has changed. | |
* | |
* | |
* | |
* ## Example: | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ | |
* | |
* selector: '[class-set]', | |
* | |
* properties: [ | |
* | |
* 'propA', | |
* | |
* 'propB' | |
* | |
* ], | |
* | |
* lifecycle: [onChange] | |
* | |
* }) | |
* | |
* class ClassSet { | |
* | |
* propA; | |
* | |
* propB; | |
* | |
* onChange(changes:{[idx: string, PropertyUpdate]}) { | |
* | |
* // This will get called after any of the properties have been updated. | |
* | |
* if (changes['propA']) { | |
* | |
* // if propA was updated | |
* | |
* } | |
* | |
* if (changes['propA']) { | |
* | |
* // if propB was updated | |
* | |
* } | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* @exportedAs angular2/annotations | |
*/ | |
var onChange : LifecycleEvent ; | |
/** | |
* Notify a directive when it has been checked. | |
* | |
* | |
* | |
* This method is called right after the directive's bindings have been checked, | |
* | |
* and before any of its children's bindings have been checked. | |
* | |
* | |
* | |
* It is invoked every time even when none of the directive's bindings has changed. | |
* | |
* | |
* | |
* ## Example: | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ | |
* | |
* selector: '[class-set]', | |
* | |
* lifecycle: [onCheck] | |
* | |
* }) | |
* | |
* class ClassSet { | |
* | |
* onCheck() { | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* @exportedAs angular2/annotations | |
*/ | |
var onCheck : LifecycleEvent ; | |
/** | |
* Notify a directive when it has been checked the first itme. | |
* | |
* | |
* | |
* This method is called right after the directive's bindings have been checked, | |
* | |
* and before any of its children's bindings have been checked. | |
* | |
* | |
* | |
* It is invoked only once. | |
* | |
* | |
* | |
* ## Example: | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ | |
* | |
* selector: '[class-set]', | |
* | |
* lifecycle: [onInit] | |
* | |
* }) | |
* | |
* class ClassSet { | |
* | |
* onInit() { | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* @exportedAs angular2/annotations | |
*/ | |
var onInit : LifecycleEvent ; | |
/** | |
* Notify a directive when the bindings of all its children have been checked (whether they have | |
* | |
* changed or not). | |
* | |
* | |
* | |
* ## Example: | |
* | |
* | |
* | |
* ``` | |
* | |
* @Directive({ | |
* | |
* selector: '[class-set]', | |
* | |
* lifecycle: [onAllChangesDone] | |
* | |
* }) | |
* | |
* class ClassSet { | |
* | |
* | |
* | |
* onAllChangesDone() { | |
* | |
* } | |
* | |
* | |
* | |
* } | |
* | |
* ``` | |
* | |
* @exportedAs angular2/annotations | |
*/ | |
var onAllChangesDone : LifecycleEvent ; | |
/** | |
* Declares the available HTML templates for an application. | |
* | |
* | |
* | |
* Each angular component requires a single `@Component` and at least one `@View` annotation. The | |
* | |
* `@View` annotation specifies the HTML template to use, and lists the directives that are active | |
* | |
* within the template. | |
* | |
* | |
* | |
* When a component is instantiated, the template is loaded into the component's shadow root, and | |
* | |
* the expressions and statements in the template are evaluated against the component. | |
* | |
* | |
* | |
* For details on the `@Component` annotation, see <a href='/angular2/angular2.api/Component'><code>Component</code></a>. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* ``` | |
* | |
* @Component({ | |
* | |
* selector: 'greet' | |
* | |
* }) | |
* | |
* @View({ | |
* | |
* template: 'Hello {{name}}!', | |
* | |
* directives: [GreetUser, Bold] | |
* | |
* }) | |
* | |
* class Greet { | |
* | |
* name: string; | |
* | |
* | |
* | |
* constructor() { | |
* | |
* this.name = 'World'; | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/annotations | |
*/ | |
class ViewAnnotation { | |
/** | |
* Specifies an inline template for an angular component. | |
* | |
* | |
* | |
* NOTE: either `templateUrl` or `template` should be used, but not both. | |
*/ | |
templateUrl: string; | |
/** | |
* Specifies a template URL for an angular component. | |
* | |
* | |
* | |
* NOTE: either `templateUrl` or `template` should be used, but not both. | |
*/ | |
template: string; | |
/** | |
* Specifies stylesheet URLs for an angular component. | |
*/ | |
styleUrls: List<string>; | |
/** | |
* Specifies an inline stylesheet for an angular component. | |
*/ | |
styles: List<string>; | |
/** | |
* Specifies a list of directives that can be used within a template. | |
* | |
* | |
* | |
* Directives must be listed explicitly to provide proper component encapsulation. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* ```javascript | |
* | |
* @Component({ | |
* | |
* selector: 'my-component' | |
* | |
* }) | |
* | |
* @View({ | |
* | |
* directives: [For] | |
* | |
* template: ' | |
* | |
* <ul> | |
* | |
* <li *ng-for="#item of items">{{item}}</li> | |
* | |
* </ul>' | |
* | |
* }) | |
* | |
* class MyComponent { | |
* | |
* } | |
* | |
* ``` | |
*/ | |
directives: List<Type | any | List<any>>; | |
/** | |
* Specify a custom renderer for this View. | |
* | |
* If this is set, neither `template`, `templateUrl`, `styles`, `styleUrls` nor `directives` are | |
* | |
* used. | |
*/ | |
renderer: string; | |
} | |
/** | |
* Specifies that a <a href='/angular2/angular2.api/QueryList'><code>QueryList</code></a> should be injected. | |
* | |
* | |
* | |
* See <a href='/angular2/angular2.api/QueryList'><code>QueryList</code></a> for usage and example. | |
* | |
* | |
* | |
* @exportedAs angular2/annotations | |
*/ | |
class QueryAnnotation extends DependencyAnnotation { | |
descendants: boolean; | |
selector: void; | |
isVarBindingQuery: boolean; | |
varBindings: List<string>; | |
toString(): string; | |
} | |
/** | |
* Specifies that a constant attribute value should be injected. | |
* | |
* | |
* | |
* The directive can inject constant string literals of host element attributes. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* Suppose we have an `<input>` element and want to know its `type`. | |
* | |
* | |
* | |
* ```html | |
* | |
* <input type="text"> | |
* | |
* ``` | |
* | |
* | |
* | |
* A decorator can inject string literal `text` like so: | |
* | |
* | |
* | |
* ```javascript | |
* | |
* @Directive({ | |
* | |
* selector: `input' | |
* | |
* }) | |
* | |
* class InputDirective { | |
* | |
* constructor(@Attribute('type') type) { | |
* | |
* // type would be `text` in this example | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/annotations | |
*/ | |
class AttributeAnnotation extends DependencyAnnotation { | |
attributeName: string; | |
token: void; | |
toString(): string; | |
} | |
/** | |
* Defines lifecycle method [onAllChangesDone ] called when the bindings of all its children have | |
* | |
* been changed. | |
*/ | |
interface OnAllChangesDone { | |
onAllChangesDone(): void; | |
} | |
/** | |
* Defines lifecycle method [onChange] called after all of component's bound | |
* | |
* properties are updated. | |
*/ | |
interface OnChange { | |
onChange(changes: StringMap<string, any>): void; | |
} | |
/** | |
* Defines lifecycle method [onDestroy] called when a directive is being destroyed. | |
*/ | |
interface OnDestroy { | |
onDestroy(): void; | |
} | |
/** | |
* Defines lifecycle method [onInit] called when a directive is being checked the first time. | |
*/ | |
interface OnInit { | |
onInit(): void; | |
} | |
/** | |
* Defines lifecycle method [onCheck] called when a directive is being checked. | |
*/ | |
interface OnCheck { | |
onCheck(): void; | |
} | |
/** | |
* Provides a way for expressing ES6 classes with parameter annotations in ES5. | |
* | |
* | |
* | |
* ## Basic Example | |
* | |
* | |
* | |
* ``` | |
* | |
* var Greeter = ng.Class({ | |
* | |
* constructor: function(name) { | |
* | |
* this.name = name; | |
* | |
* }, | |
* | |
* | |
* | |
* greet: function() { | |
* | |
* alert('Hello ' + this.name + '!'); | |
* | |
* } | |
* | |
* }); | |
* | |
* ``` | |
* | |
* | |
* | |
* is equivalent to ES6: | |
* | |
* | |
* | |
* ``` | |
* | |
* class Greeter { | |
* | |
* constructor(name) { | |
* | |
* this.name = name; | |
* | |
* } | |
* | |
* | |
* | |
* greet() { | |
* | |
* alert('Hello ' + this.name + '!'); | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* or equivalent to ES5: | |
* | |
* | |
* | |
* ``` | |
* | |
* var Greeter = function (name) { | |
* | |
* this.name = name; | |
* | |
* } | |
* | |
* | |
* | |
* Greeter.prototype.greet = function () { | |
* | |
* alert('Hello ' + this.name + '!'); | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* ## Example with parameter annotations | |
* | |
* | |
* | |
* ``` | |
* | |
* var MyService = neg.Class({ | |
* | |
* constructor: [String, [new Query(), QueryList], function(name, queryList) { | |
* | |
* ... | |
* | |
* }]; | |
* | |
* }); | |
* | |
* ``` | |
* | |
* | |
* | |
* is equivalent to ES6: | |
* | |
* | |
* | |
* ``` | |
* | |
* class MyService { | |
* | |
* constructor(name: string, @Query() queryList: QueryList) { | |
* | |
* ... | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* ## Example with inheritance | |
* | |
* | |
* | |
* ``` | |
* | |
* var Shape = ng.Class({ | |
* | |
* constructor: (color) { | |
* | |
* this.color = color; | |
* | |
* } | |
* | |
* }); | |
* | |
* | |
* | |
* var Square = ng.Class({ | |
* | |
* extends: Shape, | |
* | |
* constructor: function(color, size) { | |
* | |
* Shape.call(this, color); | |
* | |
* this.size = size; | |
* | |
* } | |
* | |
* }); | |
* | |
* ``` | |
*/ | |
function Class(clsDef: ClassDefinition) : Type ; | |
/** | |
* An interface implemented by all Angular parameter decorators, which allows them to be used as ES7 | |
* | |
* decorators. | |
*/ | |
interface ParameterDecorator { | |
/** | |
* Invoke as ES7 decorator. | |
*/ | |
(cls: Type, unusedKey: any, index: number): void; | |
} | |
/** | |
* <a href='/angular2/angular2.api/Attribute'><code>Attribute</code></a> factory function. | |
*/ | |
var Attribute : AttributeFactory ; | |
/** | |
* <a href='/angular2/angular2.api/Attribute'><code>Attribute</code></a> factory for creating annotations, decorators or DSL. | |
* | |
* | |
* | |
* ## Example as TypeScript Decorator | |
* | |
* | |
* | |
* ``` | |
* | |
* import {Attribute, Component, View} from "angular2/angular2"; | |
* | |
* | |
* | |
* @Component({...}) | |
* | |
* @View({...}) | |
* | |
* class MyComponent { | |
* | |
* constructor(@Attribute('title') title: string) { | |
* | |
* ... | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* ## Example as ES5 DSL | |
* | |
* | |
* | |
* ``` | |
* | |
* var MyComponent = ng | |
* | |
* .Component({...}) | |
* | |
* .View({...}) | |
* | |
* .Class({ | |
* | |
* constructor: [new ng.Attribute('title'), function(title) { | |
* | |
* ... | |
* | |
* }] | |
* | |
* }) | |
* | |
* ``` | |
* | |
* | |
* | |
* ## Example as ES5 annotation | |
* | |
* | |
* | |
* ``` | |
* | |
* var MyComponent = function(title) { | |
* | |
* ... | |
* | |
* }; | |
* | |
* | |
* | |
* MyComponent.annotations = [ | |
* | |
* new ng.Component({...}) | |
* | |
* new ng.View({...}) | |
* | |
* ] | |
* | |
* MyComponent.parameters = [ | |
* | |
* [new ng.Attribute('title')] | |
* | |
* ] | |
* | |
* ``` | |
*/ | |
interface AttributeFactory { | |
new(name: string): AttributeAnnotation; | |
(name: string): TypeDecorator; | |
} | |
/** | |
* <a href='/angular2/angular2.api/Component'><code>Component</code></a> factory function. | |
*/ | |
var Component : ComponentFactory ; | |
/** | |
* Interface for the <a href='/angular2/angular2.api/Component'><code>Component</code></a> decorator function. | |
* | |
* | |
* | |
* See <a href='/angular2/angular2.api/ComponentFactory'><code>ComponentFactory</code></a>. | |
*/ | |
interface ComponentDecorator extends TypeDecorator { | |
/** | |
* Chain <a href='/angular2/angular2.api/View'><code>View</code></a> annotation. | |
*/ | |
View(obj: { | |
templateUrl?: string, | |
template?: string, | |
directives?: List<Type | any | List<any>>, | |
renderer?: string, | |
styles?: List<string>, | |
styleUrls?: List<string>, | |
}): ViewDecorator; | |
} | |
/** | |
* <a href='/angular2/angular2.api/ComponentAnnotation'><code>ComponentAnnotation</code></a> factory for creating annotations, decorators or DSL. | |
* | |
* | |
* | |
* ## Example as TypeScript Decorator | |
* | |
* | |
* | |
* ``` | |
* | |
* import {Component, View} from "angular2/angular2"; | |
* | |
* | |
* | |
* @Component({...}) | |
* | |
* @View({...}) | |
* | |
* class MyComponent { | |
* | |
* constructor() { | |
* | |
* ... | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* ## Example as ES5 DSL | |
* | |
* | |
* | |
* ``` | |
* | |
* var MyComponent = ng | |
* | |
* .Component({...}) | |
* | |
* .View({...}) | |
* | |
* .Class({ | |
* | |
* constructor: function() { | |
* | |
* ... | |
* | |
* } | |
* | |
* }) | |
* | |
* ``` | |
* | |
* | |
* | |
* ## Example as ES5 annotation | |
* | |
* | |
* | |
* ``` | |
* | |
* var MyComponent = function() { | |
* | |
* ... | |
* | |
* }; | |
* | |
* | |
* | |
* MyComponent.annotations = [ | |
* | |
* new ng.Component({...}) | |
* | |
* new ng.View({...}) | |
* | |
* ] | |
* | |
* ``` | |
*/ | |
interface ComponentFactory { | |
new(obj: { | |
selector?: string, | |
properties?: List<string>, | |
events?: List<string>, | |
host?: StringMap<string, string>, | |
lifecycle?: List<LifecycleEvent>, | |
hostInjector?: List<any>, | |
exportAs?: string, | |
compileChildren?: boolean, | |
viewInjector?: List<any>, | |
changeDetection?: string, | |
}): ComponentAnnotation; | |
(obj: { | |
selector?: string, | |
properties?: List<string>, | |
events?: List<string>, | |
host?: StringMap<string, string>, | |
lifecycle?: List<LifecycleEvent>, | |
hostInjector?: List<any>, | |
exportAs?: string, | |
compileChildren?: boolean, | |
viewInjector?: List<any>, | |
changeDetection?: string, | |
}): ComponentDecorator; | |
} | |
/** | |
* <a href='/angular2/angular2.api/Directive'><code>Directive</code></a> factory function. | |
*/ | |
var Directive : DirectiveFactory ; | |
/** | |
* Interface for the <a href='/angular2/angular2.api/Directive'><code>Directive</code></a> decorator function. | |
* | |
* | |
* | |
* See <a href='/angular2/angular2.api/DirectiveFactory'><code>DirectiveFactory</code></a>. | |
*/ | |
interface DirectiveDecorator extends TypeDecorator { | |
} | |
/** | |
* <a href='/angular2/angular2.api/Directive'><code>Directive</code></a> factory for creating annotations, decorators or DSL. | |
* | |
* | |
* | |
* ## Example as TypeScript Decorator | |
* | |
* | |
* | |
* ``` | |
* | |
* import {Directive} from "angular2/angular2"; | |
* | |
* | |
* | |
* @Directive({...}) | |
* | |
* class MyDirective { | |
* | |
* constructor() { | |
* | |
* ... | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* ## Example as ES5 DSL | |
* | |
* | |
* | |
* ``` | |
* | |
* var MyDirective = ng | |
* | |
* .Directive({...}) | |
* | |
* .Class({ | |
* | |
* constructor: function() { | |
* | |
* ... | |
* | |
* } | |
* | |
* }) | |
* | |
* ``` | |
* | |
* | |
* | |
* ## Example as ES5 annotation | |
* | |
* | |
* | |
* ``` | |
* | |
* var MyDirective = function() { | |
* | |
* ... | |
* | |
* }; | |
* | |
* | |
* | |
* MyDirective.annotations = [ | |
* | |
* new ng.Directive({...}) | |
* | |
* ] | |
* | |
* ``` | |
*/ | |
interface DirectiveFactory { | |
new(obj: { | |
selector?: string, properties?: List<string>, events?: List<string>, | |
host?: StringMap<string, string>, lifecycle?: List<LifecycleEvent>, | |
hostInjector?: List<any>, exportAs?: string, compileChildren?: boolean; | |
}): DirectiveAnnotation; | |
(obj: { | |
selector?: string, properties?: List<string>, events?: List<string>, | |
host?: StringMap<string, string>, lifecycle?: List<LifecycleEvent>, | |
hostInjector?: List<any>, exportAs?: string, compileChildren?: boolean; | |
}): DirectiveDecorator; | |
} | |
/** | |
* <a href='/angular2/angular2.api/View'><code>View</code></a> factory function. | |
*/ | |
var View : ViewFactory ; | |
/** | |
* Interface for the <a href='/angular2/angular2.api/View'><code>View</code></a> decorator function. | |
* | |
* | |
* | |
* See <a href='/angular2/angular2.api/ViewFactory'><code>ViewFactory</code></a>. | |
*/ | |
interface ViewDecorator extends TypeDecorator { | |
/** | |
* Chain <a href='/angular2/angular2.api/View'><code>View</code></a> annotation. | |
*/ | |
View(obj: { | |
templateUrl?: string, | |
template?: string, | |
directives?: List<Type | any | List<any>>, | |
renderer?: string, | |
styles?: List<string>, | |
styleUrls?: List<string>, | |
}): ViewDecorator; | |
} | |
/** | |
* <a href='/angular2/angular2.api/ViewAnnotation'><code>ViewAnnotation</code></a> factory for creating annotations, decorators or DSL. | |
* | |
* | |
* | |
* ## Example as TypeScript Decorator | |
* | |
* | |
* | |
* ``` | |
* | |
* import {Component, View} from "angular2/angular2"; | |
* | |
* | |
* | |
* @Component({...}) | |
* | |
* @View({...}) | |
* | |
* class MyComponent { | |
* | |
* constructor() { | |
* | |
* ... | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* ## Example as ES5 DSL | |
* | |
* | |
* | |
* ``` | |
* | |
* var MyComponent = ng | |
* | |
* .Component({...}) | |
* | |
* .View({...}) | |
* | |
* .Class({ | |
* | |
* constructor: function() { | |
* | |
* ... | |
* | |
* } | |
* | |
* }) | |
* | |
* ``` | |
* | |
* | |
* | |
* ## Example as ES5 annotation | |
* | |
* | |
* | |
* ``` | |
* | |
* var MyComponent = function() { | |
* | |
* ... | |
* | |
* }; | |
* | |
* | |
* | |
* MyComponent.annotations = [ | |
* | |
* new ng.Component({...}) | |
* | |
* new ng.View({...}) | |
* | |
* ] | |
* | |
* ``` | |
*/ | |
interface ViewFactory { | |
new(obj: { | |
templateUrl?: string, | |
template?: string, | |
directives?: List<Type | any | List<any>>, | |
renderer?: string, | |
styles?: List<string>, | |
styleUrls?: List<string>, | |
}): ViewAnnotation; | |
(obj: { | |
templateUrl?: string, | |
template?: string, | |
directives?: List<Type | any | List<any>>, | |
renderer?: string, | |
styles?: List<string>, | |
styleUrls?: List<string>, | |
}): ViewDecorator; | |
} | |
/** | |
* <a href='/angular2/angular2.api/Query'><code>Query</code></a> factory for creating annotations, decorators or DSL. | |
* | |
* | |
* | |
* ## Example as TypeScript Decorator | |
* | |
* | |
* | |
* ``` | |
* | |
* import {Query, QueryList, Component, View} from "angular2/angular2"; | |
* | |
* | |
* | |
* @Component({...}) | |
* | |
* @View({...}) | |
* | |
* class MyComponent { | |
* | |
* constructor(@Query(SomeType) queryList: QueryList) { | |
* | |
* ... | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* ## Example as ES5 DSL | |
* | |
* | |
* | |
* ``` | |
* | |
* var MyComponent = ng | |
* | |
* .Component({...}) | |
* | |
* .View({...}) | |
* | |
* .Class({ | |
* | |
* constructor: [new ng.Query(SomeType), function(queryList) { | |
* | |
* ... | |
* | |
* }] | |
* | |
* }) | |
* | |
* ``` | |
* | |
* | |
* | |
* ## Example as ES5 annotation | |
* | |
* | |
* | |
* ``` | |
* | |
* var MyComponent = function(queryList) { | |
* | |
* ... | |
* | |
* }; | |
* | |
* | |
* | |
* MyComponent.annotations = [ | |
* | |
* new ng.Component({...}) | |
* | |
* new ng.View({...}) | |
* | |
* ] | |
* | |
* MyComponent.parameters = [ | |
* | |
* [new ng.Query(SomeType)] | |
* | |
* ] | |
* | |
* ``` | |
*/ | |
interface QueryFactory { | |
new(selector: Type | string, {descendants}?: {descendants?: boolean}): QueryAnnotation; | |
(selector: Type | string, {descendants}?: {descendants?: boolean}): ParameterDecorator; | |
} | |
/** | |
* Bootstrapping for Angular applications. | |
* | |
* | |
* | |
* You instantiate an Angular application by explicitly specifying a component to use as the root | |
* | |
* component for your | |
* | |
* application via the `bootstrap()` method. | |
* | |
* | |
* | |
* ## Simple Example | |
* | |
* | |
* | |
* Assuming this `index.html`: | |
* | |
* | |
* | |
* ```html | |
* | |
* <html> | |
* | |
* <!-- load Angular script tags here. --> | |
* | |
* <body> | |
* | |
* <my-app>loading...</my-app> | |
* | |
* </body> | |
* | |
* </html> | |
* | |
* ``` | |
* | |
* | |
* | |
* An application is bootstrapped inside an existing browser DOM, typically `index.html`. Unlike | |
* | |
* Angular 1, Angular 2 | |
* | |
* does not compile/process bindings in `index.html`. This is mainly for security reasons, as well | |
* | |
* as architectural | |
* | |
* changes in Angular 2. This means that `index.html` can safely be processed using server-side | |
* | |
* technologies such as | |
* | |
* bindings. Bindings can thus use double-curly `{{ syntax }}` without collision from Angular 2 | |
* | |
* component double-curly | |
* | |
* `{{ syntax }}`. | |
* | |
* | |
* | |
* We can use this script code: | |
* | |
* | |
* | |
* ``` | |
* | |
* @Component({ | |
* | |
* selector: 'my-app' | |
* | |
* }) | |
* | |
* @View({ | |
* | |
* template: 'Hello {{ name }}!' | |
* | |
* }) | |
* | |
* class MyApp { | |
* | |
* name:string; | |
* | |
* | |
* | |
* constructor() { | |
* | |
* this.name = 'World'; | |
* | |
* } | |
* | |
* } | |
* | |
* | |
* | |
* main() { | |
* | |
* return bootstrap(MyApp); | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* When the app developer invokes `bootstrap()` with the root component `MyApp` as its argument, | |
* | |
* Angular performs the | |
* | |
* following tasks: | |
* | |
* | |
* | |
* 1. It uses the component's `selector` property to locate the DOM element which needs to be | |
* | |
* upgraded into | |
* | |
* the angular component. | |
* | |
* 2. It creates a new child injector (from the platform injector). Optionally, you can also | |
* | |
* override the injector configuration for an app by | |
* | |
* invoking `bootstrap` with the `componentInjectableBindings` argument. | |
* | |
* 3. It creates a new `Zone` and connects it to the angular application's change detection domain | |
* | |
* instance. | |
* | |
* 4. It creates a shadow DOM on the selected component's host element and loads the template into | |
* | |
* it. | |
* | |
* 5. It instantiates the specified component. | |
* | |
* 6. Finally, Angular performs change detection to apply the initial data bindings for the | |
* | |
* application. | |
* | |
* | |
* | |
* | |
* | |
* ## Instantiating Multiple Applications on a Single Page | |
* | |
* | |
* | |
* There are two ways to do this. | |
* | |
* | |
* | |
* | |
* | |
* ### Isolated Applications | |
* | |
* | |
* | |
* Angular creates a new application each time that the `bootstrap()` method is invoked. When | |
* | |
* multiple applications | |
* | |
* are created for a page, Angular treats each application as independent within an isolated change | |
* | |
* detection and | |
* | |
* `Zone` domain. If you need to share data between applications, use the strategy described in the | |
* | |
* next | |
* | |
* section, "Applications That Share Change Detection." | |
* | |
* | |
* | |
* | |
* | |
* ### Applications That Share Change Detection | |
* | |
* | |
* | |
* If you need to bootstrap multiple applications that share common data, the applications must | |
* | |
* share a common | |
* | |
* change detection and zone. To do that, create a meta-component that lists the application | |
* | |
* components in its template. | |
* | |
* By only invoking the `bootstrap()` method once, with the meta-component as its argument, you | |
* | |
* ensure that only a | |
* | |
* single change detection zone is created and therefore data can be shared across the applications. | |
* | |
* | |
* | |
* | |
* | |
* ## Platform Injector | |
* | |
* | |
* | |
* When working within a browser window, there are many singleton resources: cookies, title, | |
* | |
* location, and others. | |
* | |
* Angular services that represent these resources must likewise be shared across all Angular | |
* | |
* applications that | |
* | |
* occupy the same browser window. For this reason, Angular creates exactly one global platform | |
* | |
* injector which stores | |
* | |
* all shared services, and each angular application injector has the platform injector as its | |
* | |
* parent. | |
* | |
* | |
* | |
* Each application has its own private injector as well. When there are multiple applications on a | |
* | |
* page, Angular treats | |
* | |
* each application injector's services as private to that application. | |
* | |
* | |
* | |
* | |
* | |
* # API | |
* | |
* - `appComponentType`: The root component which should act as the application. This is a reference | |
* | |
* to a `Type` | |
* | |
* which is annotated with `@Component(...)`. | |
* | |
* - `componentInjectableBindings`: An additional set of bindings that can be added to the app | |
* | |
* injector | |
* | |
* to override default injection behavior. | |
* | |
* - `errorReporter`: `function(exception:any, stackTrace:string)` a default error reporter for | |
* | |
* unhandled exceptions. | |
* | |
* | |
* | |
* Returns a `Promise` of <a href='/angular2/angular2.api/ApplicationRef'><code>ApplicationRef</code></a>. | |
* | |
* | |
* | |
* @exportedAs angular2/core | |
*/ | |
function bootstrap(appComponentType: Type, componentInjectableBindings?: List<Type | Binding | List<any>>, errorReporter?: Function) : Promise<ApplicationRef> ; | |
/** | |
* Represents a Angular's representation of an Application. | |
* | |
* | |
* | |
* `ApplicationRef` represents a running application instance. Use it to retrieve the host | |
* | |
* component, injector, | |
* | |
* or dispose of an application. | |
*/ | |
class ApplicationRef { | |
/** | |
* Returns the current <a href='/angular2/angular2.api/Component'><code>Component</code></a> type. | |
*/ | |
hostComponentType: Type; | |
/** | |
* Returns the current <a href='/angular2/angular2.api/Component'><code>Component</code></a> instance. | |
*/ | |
hostComponent: any; | |
/** | |
* Dispose (un-load) the application. | |
*/ | |
dispose(): void; | |
/** | |
* Returns the root application <a href='/angular2/angular2.api/Injector'><code>Injector</code></a>. | |
*/ | |
injector: Injector; | |
} | |
/** | |
* An opaque token representing the application root type in the <a href='/angular2/angular2.api/Injector'><code>Injector</code></a>. | |
* | |
* | |
* | |
* ``` | |
* | |
* @Component(...) | |
* | |
* @View(...) | |
* | |
* class MyApp { | |
* | |
* ... | |
* | |
* } | |
* | |
* | |
* | |
* bootstrap(MyApp).then((appRef:ApplicationRef) { | |
* | |
* expect(appRef.injector.get(appComponentTypeToken)).toEqual(MyApp); | |
* | |
* }); | |
* | |
* | |
* | |
* ``` | |
*/ | |
var appComponentTypeToken; | |
/** | |
* Specifies app root url for the application. | |
* | |
* | |
* | |
* Used by the <a href='/angular2/angular2.api/Compiler'><code>Compiler</code></a> when resolving HTML and CSS template URLs. | |
* | |
* | |
* | |
* This interface can be overridden by the application developer to create custom behavior. | |
* | |
* | |
* | |
* See <a href='/angular2/angular2.api/Compiler'><code>Compiler</code></a> | |
*/ | |
class AppRootUrl { | |
/** | |
* Returns the base URL of the currently running application. | |
*/ | |
value: void; | |
} | |
/** | |
* Used by the <a href='/angular2/angular2.api/Compiler'><code>Compiler</code></a> when resolving HTML and CSS template URLs. | |
* | |
* | |
* | |
* This interface can be overridden by the application developer to create custom behavior. | |
* | |
* | |
* | |
* See <a href='/angular2/angular2.api/Compiler'><code>Compiler</code></a> | |
*/ | |
class UrlResolver { | |
/** | |
* Resolves the `url` given the `baseUrl`: | |
* | |
* - when the `url` is null, the `baseUrl` is returned, | |
* | |
* - if `url` is relative ('path/to/here', './path/to/here'), the resolved url is a combination of | |
* | |
* `baseUrl` and `url`, | |
* | |
* - if `url` is absolute (it has a scheme: 'http://', 'https://' or start with '/'), the `url` is | |
* | |
* returned as is (ignoring the `baseUrl`) | |
* | |
* | |
* | |
* @param {string} baseUrl | |
* | |
* @param {string} url | |
* | |
* @returns {string} the resolved URL | |
*/ | |
resolve(baseUrl: string, url: string): string; | |
} | |
/** | |
* Resolve a <a href='/angular2/src/facade/lang/Type'><code>Type</code></a> from a <a href='/angular2/angular2.api/Component'><code>Component</code></a> into a URL. | |
* | |
* | |
* | |
* This interface can be overridden by the application developer to create custom behavior. | |
* | |
* | |
* | |
* See <a href='/angular2/angular2.api/Compiler'><code>Compiler</code></a> | |
*/ | |
class ComponentUrlMapper { | |
/** | |
* Returns the base URL to the component source file. | |
* | |
* The returned URL could be: | |
* | |
* - an absolute URL, | |
* | |
* - a path relative to the application | |
*/ | |
getUrl(component: Type): string; | |
} | |
/** | |
* Resolve a <a href='/angular2/src/facade/lang/Type'><code>Type</code></a> for <a href='/angular2/angular2.api/Directive'><code>Directive</code></a>. | |
* | |
* | |
* | |
* This interface can be overridden by the application developer to create custom behavior. | |
* | |
* | |
* | |
* See <a href='/angular2/angular2.api/Compiler'><code>Compiler</code></a> | |
*/ | |
class DirectiveResolver { | |
/** | |
* Return <a href='/angular2/angular2.api/Directive'><code>Directive</code></a> for a given <a href='/angular2/src/facade/lang/Type'><code>Type</code></a>. | |
*/ | |
resolve(type: Type): DirectiveAnnotation; | |
} | |
/** | |
* ## URL Resolution | |
* | |
* | |
* | |
* ``` | |
* | |
* var appRootUrl: AppRootUrl = ...; | |
* | |
* var componentUrlMapper: ComponentUrlMapper = ...; | |
* | |
* var urlResolver: UrlResolver = ...; | |
* | |
* | |
* | |
* var componentType: Type = ...; | |
* | |
* var componentAnnotation: ComponentAnnotation = ...; | |
* | |
* var viewAnnotation: ViewAnnotation = ...; | |
* | |
* | |
* | |
* // Resolving a URL | |
* | |
* | |
* | |
* var url = viewAnnotation.templateUrl; | |
* | |
* var componentUrl = componentUrlMapper.getUrl(componentType); | |
* | |
* var componentResolvedUrl = urlResolver.resolve(appRootUrl.value, componentUrl); | |
* | |
* var templateResolvedUrl = urlResolver.resolve(componetResolvedUrl, url); | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/view | |
*/ | |
class Compiler { | |
compileInHost(componentTypeOrBinding: Type | Binding): Promise<ProtoViewRef>; | |
} | |
/** | |
* Entry point for creating, moving views in the view hierarchy and destroying views. | |
* | |
* This manager contains all recursion and delegates to helper methods | |
* | |
* in AppViewManagerUtils and the Renderer, so unit tests get simpler. | |
*/ | |
class AppViewManager { | |
/** | |
* Returns associated Component <a href='/angular2/angular2.api/ViewRef'><code>ViewRef</code></a> from <a href='/angular2/angular2.api/ElementRef'><code>ElementRef</code></a>. | |
* | |
* | |
* | |
* If an <a href='/angular2/angular2.api/ElementRef'><code>ElementRef</code></a> is from an element which has a component, this method returns | |
* | |
* the component's <a href='/angular2/angular2.api/ViewRef'><code>ViewRef</code></a>. | |
*/ | |
getComponentView(hostLocation: ElementRef): ViewRef; | |
/** | |
* Returns a <a href='/angular2/angular2.api/ViewContainerRef'><code>ViewContainerRef</code></a> at the <a href='/angular2/angular2.api/ElementRef'><code>ElementRef</code></a> location. | |
*/ | |
getViewContainer(location: ElementRef): ViewContainerRef; | |
/** | |
* Return the first child element of the host element view. | |
*/ | |
getHostElement(hostViewRef: ViewRef): ElementRef; | |
/** | |
* Returns an ElementRef for the element with the given variable name | |
* | |
* in the current view. | |
* | |
* | |
* | |
* - `hostLocation`: <a href='/angular2/angular2.api/ElementRef'><code>ElementRef</code></a> of any element in the View which defines the scope of | |
* | |
* search. | |
* | |
* - `variableName`: Name of the variable to locate. | |
* | |
* - Returns <a href='/angular2/angular2.api/ElementRef'><code>ElementRef</code></a> of the found element or null. (Throws if not found.) | |
*/ | |
getNamedElementInComponentView(hostLocation: ElementRef, variableName: string): ElementRef; | |
/** | |
* Returns the component instance for a given element. | |
* | |
* | |
* | |
* The component is the execution context as seen by an expression at that <a href='/angular2/angular2.api/ElementRef'><code>ElementRef</code></a> | |
* | |
* location. | |
*/ | |
getComponent(hostLocation: ElementRef): any; | |
/** | |
* Load component view into existing element. | |
* | |
* | |
* | |
* Use this if a host element is already in the DOM and it is necessary to upgrade | |
* | |
* the element into Angular component by attaching a view but reusing the existing element. | |
* | |
* | |
* | |
* - `hostProtoViewRef`: <a href='/angular2/angular2.api/ProtoViewRef'><code>ProtoViewRef</code></a> Proto view to use in creating a view for this | |
* | |
* component. | |
* | |
* - `overrideSelector`: (optional) selector to use in locating the existing element to load | |
* | |
* the view into. If not specified use the selector in the component definition of the | |
* | |
* `hostProtoView`. | |
* | |
* - injector: <a href='/angular2/angular2.api/Injector'><code>Injector</code></a> to use as parent injector for the view. | |
* | |
* | |
* | |
* See <a href='/angular2/angular2.api/AppViewManager#destroyRootHostView'><code>AppViewManager</code></a>. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* ``` | |
* | |
* @ng.Component({ | |
* | |
* selector: 'child-component' | |
* | |
* }) | |
* | |
* @ng.View({ | |
* | |
* template: 'Child' | |
* | |
* }) | |
* | |
* class ChildComponent { | |
* | |
* | |
* | |
* } | |
* | |
* | |
* | |
* @ng.Component({ | |
* | |
* selector: 'my-app' | |
* | |
* }) | |
* | |
* @ng.View({ | |
* | |
* template: ` | |
* | |
* Parent (<some-component></some-component>) | |
* | |
* ` | |
* | |
* }) | |
* | |
* class MyApp { | |
* | |
* viewRef: ng.ViewRef; | |
* | |
* | |
* | |
* constructor(public appViewManager: ng.AppViewManager, compiler: ng.Compiler) { | |
* | |
* compiler.compileInHost(ChildComponent).then((protoView: ng.ProtoViewRef) => { | |
* | |
* this.viewRef = appViewManager.createRootHostView(protoView, 'some-component', null); | |
* | |
* }) | |
* | |
* } | |
* | |
* | |
* | |
* onDestroy() { | |
* | |
* this.appViewManager.destroyRootHostView(this.viewRef); | |
* | |
* this.viewRef = null; | |
* | |
* } | |
* | |
* } | |
* | |
* | |
* | |
* ng.bootstrap(MyApp); | |
* | |
* ``` | |
*/ | |
createRootHostView(hostProtoViewRef: ProtoViewRef, overrideSelector: string, injector: Injector): ViewRef; | |
/** | |
* Remove the View created with <a href='/angular2/angular2.api/AppViewManager#createRootHostView'><code>AppViewManager</code></a>. | |
*/ | |
destroyRootHostView(hostViewRef: ViewRef): void; | |
/** | |
* See <a href='/angular2/angular2.api/AppViewManager#destroyViewInContainer'><code>AppViewManager</code></a>. | |
*/ | |
createViewInContainer(viewContainerLocation: ElementRef, atIndex: number, protoViewRef: ProtoViewRef, context?: ElementRef, bindings?: ResolvedBinding[]): ViewRef; | |
/** | |
* See <a href='/angular2/angular2.api/AppViewManager#createViewInContainer'><code>AppViewManager</code></a>. | |
*/ | |
destroyViewInContainer(viewContainerLocation: ElementRef, atIndex: number): void; | |
/** | |
* See <a href='/angular2/angular2.api/AppViewManager#detachViewInContainer'><code>AppViewManager</code></a>. | |
*/ | |
attachViewInContainer(viewContainerLocation: ElementRef, atIndex: number, viewRef: ViewRef): ViewRef; | |
/** | |
* See <a href='/angular2/angular2.api/AppViewManager#attachViewInContainer'><code>AppViewManager</code></a>. | |
*/ | |
detachViewInContainer(viewContainerLocation: ElementRef, atIndex: number): ViewRef; | |
} | |
/** | |
* An iterable live list of components in the Light DOM. | |
* | |
* | |
* | |
* Injectable Objects that contains a live list of child directives in the light DOM of a directive. | |
* | |
* The directives are kept in depth-first pre-order traversal of the DOM. | |
* | |
* | |
* | |
* The `QueryList` is iterable, therefore it can be used in both javascript code with `for..of` loop | |
* | |
* as well as in | |
* | |
* template with `*ng-for="of"` directive. | |
* | |
* | |
* | |
* NOTE: In the future this class will implement an `Observable` interface. For now it uses a plain | |
* | |
* list of observable | |
* | |
* callbacks. | |
* | |
* | |
* | |
* # Example: | |
* | |
* | |
* | |
* Assume that `<tabs>` component would like to get a list its children which are `<pane>` | |
* | |
* components as shown in this | |
* | |
* example: | |
* | |
* | |
* | |
* ```html | |
* | |
* <tabs> | |
* | |
* <pane title="Overview">...</pane> | |
* | |
* <pane *ng-for="#o of objects" [title]="o.title">{{o.text}}</pane> | |
* | |
* </tabs> | |
* | |
* ``` | |
* | |
* | |
* | |
* In the above example the list of `<tabs>` elements needs to get a list of `<pane>` elements so | |
* | |
* that it could render | |
* | |
* tabs with the correct titles and in the correct order. | |
* | |
* | |
* | |
* A possible solution would be for a `<pane>` to inject `<tabs>` component and then register itself | |
* | |
* with `<tabs>` | |
* | |
* component's on `hydrate` and deregister on `dehydrate` event. While a reasonable approach, this | |
* | |
* would only work | |
* | |
* partialy since `*ng-for` could rearrange the list of `<pane>` components which would not be | |
* | |
* reported to `<tabs>` | |
* | |
* component and thus the list of `<pane>` components would be out of sync with respect to the list | |
* | |
* of `<pane>` elements. | |
* | |
* | |
* | |
* A preferred solution is to inject a `QueryList` which is a live list of directives in the | |
* | |
* component`s light DOM. | |
* | |
* | |
* | |
* ```javascript | |
* | |
* @Component({ | |
* | |
* selector: 'tabs' | |
* | |
* }) | |
* | |
* @View({ | |
* | |
* template: ` | |
* | |
* <ul> | |
* | |
* <li *ng-for="#pane of panes">{{pane.title}}</li> | |
* | |
* </ul> | |
* | |
* <content></content> | |
* | |
* ` | |
* | |
* }) | |
* | |
* class Tabs { | |
* | |
* panes: QueryList<Pane> | |
* | |
* | |
* | |
* constructor(@Query(Pane) panes:QueryList<Pane>) { | |
* | |
* this.panes = panes; | |
* | |
* } | |
* | |
* } | |
* | |
* | |
* | |
* @Component({ | |
* | |
* selector: 'pane', | |
* | |
* properties: ['title'] | |
* | |
* }) | |
* | |
* @View(...) | |
* | |
* class Pane { | |
* | |
* title:string; | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/view | |
*/ | |
class QueryList<T> extends BaseQueryList<T> { | |
onChange(callback: any): void; | |
removeCallback(callback: any): void; | |
} | |
/** | |
* Reference to the element. | |
* | |
* | |
* | |
* Represents an opeque refference to the underlying element. The element is a DOM ELement in | |
* | |
* a Browser, but may represent other types on other rendering platforms. In the browser the | |
* | |
* `ElementRef` can be sent to the web-worker. Web Workers can not have references to the | |
* | |
* DOM Elements. | |
* | |
* | |
* | |
* @exportedAs angular2/view | |
*/ | |
class ElementRef implements RenderElementRef { | |
/** | |
* Reference to the <a href='/angular2/angular2.api/ViewRef'><code>ViewRef</code></a> where the `ElementRef` is inside of. | |
*/ | |
parentView: ViewRef; | |
/** | |
* Index of the element inside the <a href='/angular2/angular2.api/ViewRef'><code>ViewRef</code></a>. | |
* | |
* | |
* | |
* This is used internally by the Angular framework to locate elements. | |
*/ | |
boundElementIndex: number; | |
renderView: RenderViewRef; | |
/** | |
* Returns the native Element implementation. | |
* | |
* | |
* | |
* In the browser this represents the DOM Element. | |
* | |
* | |
* | |
* The `nativeElement` can be used as an escape hatch when direct DOM manipulation is needed. Use | |
* | |
* this with caution, as it creates tight coupling between your application and the Browser, which | |
* | |
* will not work in WebWorkers. | |
* | |
* | |
* | |
* NOTE: This method will return null in the webworker scenario! | |
*/ | |
nativeElement: any; | |
} | |
/** | |
* Abstract reference to the element which can be marshaled across web-worker boundry. | |
* | |
* | |
* | |
* This interface is used by the <a href='/angular2/angular2.api/Renderer'><code>Renderer</code></a> api. | |
*/ | |
interface RenderElementRef { | |
/** | |
* Reference to the <a href='/angular2/angular2.api/RenderViewRef'><code>RenderViewRef</code></a> where the `RenderElementRef` is inside of. | |
*/ | |
renderView: RenderViewRef; | |
/** | |
* Index of the element inside the <a href='/angular2/angular2.api/ViewRef'><code>ViewRef</code></a>. | |
* | |
* | |
* | |
* This is used internally by the Angular framework to locate elements. | |
*/ | |
boundElementIndex: number; | |
} | |
/** | |
* A reference to an Angular View. | |
* | |
* | |
* | |
* A View is a fundemental building block of Application UI. A View is the smallest set of | |
* | |
* elements which are created and destroyed together. A View can chane properties on the elements | |
* | |
* within the view, but it can not change the structure of those elements. | |
* | |
* | |
* | |
* To change structure of the elements, the Views can contain zero or more <a href='/angular2/angular2.api/ViewContainerRef'><code>ViewContainerRef</code></a>s | |
* | |
* which allow the views to be nested. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* Given this template | |
* | |
* | |
* | |
* ``` | |
* | |
* Count: {{items.length}} | |
* | |
* <ul> | |
* | |
* <li *ng-for="var item of items">{{item}}</li> | |
* | |
* </ul> | |
* | |
* ``` | |
* | |
* | |
* | |
* The above example we have two <a href='/angular2/angular2.api/ProtoViewRef'><code>ProtoViewRef</code></a>s: | |
* | |
* | |
* | |
* Outter <a href='/angular2/angular2.api/ProtoViewRef'><code>ProtoViewRef</code></a>: | |
* | |
* ``` | |
* | |
* Count: {{items.length}} | |
* | |
* <ul> | |
* | |
* <template ng-for var-item [ng-for-of]="items"></template> | |
* | |
* </ul> | |
* | |
* ``` | |
* | |
* | |
* | |
* Inner <a href='/angular2/angular2.api/ProtoViewRef'><code>ProtoViewRef</code></a>: | |
* | |
* ``` | |
* | |
* <li>{{item}}</li> | |
* | |
* ``` | |
* | |
* | |
* | |
* Notice that the original template is broken down into two separet <a href='/angular2/angular2.api/ProtoViewRef'><code>ProtoViewRef</code></a>s. | |
* | |
* | |
* | |
* The outter/inner <a href='/angular2/angular2.api/ProtoViewRef'><code>ProtoViewRef</code></a>s are then assambled into views like so: | |
* | |
* | |
* | |
* ``` | |
* | |
* <!-- ViewRef: outter-0 --> | |
* | |
* Count: 2 | |
* | |
* <ul> | |
* | |
* <template view-container-ref></template> | |
* | |
* <!-- ViewRef: inner-1 --><li>first</li><!-- /ViewRef: inner-1 --> | |
* | |
* <!-- ViewRef: inner-2 --><li>second</li><!-- /ViewRef: inner-2 --> | |
* | |
* </ul> | |
* | |
* <!-- /ViewRef: outter-0 --> | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/view | |
*/ | |
class ViewRef { | |
/** | |
* Return <a href='/angular2/angular2.api/RenderViewRef'><code>RenderViewRef</code></a> | |
*/ | |
render: RenderViewRef; | |
/** | |
* Set local variable for a view. | |
*/ | |
setLocal(contextName: string, value: any): void; | |
} | |
/** | |
* A reference to an an Angular ProtoView. | |
* | |
* | |
* | |
* A ProtoView is a reference to a template for easy creation of views. | |
* | |
* (See <a href='/angular2/angular2.api/AppViewManager#createViewInContainer'><code>AppViewManager</code></a> and <a href='/angular2/angular2.api/AppViewManager#createRootHostView'><code>AppViewManager</code></a>). | |
* | |
* | |
* | |
* A `ProtoView` is a foctary for creating `View`s. | |
* | |
* | |
* | |
* ## Example | |
* | |
* | |
* | |
* Given this template | |
* | |
* | |
* | |
* ``` | |
* | |
* Count: {{items.length}} | |
* | |
* <ul> | |
* | |
* <li *ng-for="var item of items">{{item}}</li> | |
* | |
* </ul> | |
* | |
* ``` | |
* | |
* | |
* | |
* The above example we have two <a href='/angular2/angular2.api/ProtoViewRef'><code>ProtoViewRef</code></a>s: | |
* | |
* | |
* | |
* Outter <a href='/angular2/angular2.api/ProtoViewRef'><code>ProtoViewRef</code></a>: | |
* | |
* ``` | |
* | |
* Count: {{items.length}} | |
* | |
* <ul> | |
* | |
* <template ng-for var-item [ng-for-of]="items"></template> | |
* | |
* </ul> | |
* | |
* ``` | |
* | |
* | |
* | |
* Inner <a href='/angular2/angular2.api/ProtoViewRef'><code>ProtoViewRef</code></a>: | |
* | |
* ``` | |
* | |
* <li>{{item}}</li> | |
* | |
* ``` | |
* | |
* | |
* | |
* Notice that the original template is broken down into two separet <a href='/angular2/angular2.api/ProtoViewRef'><code>ProtoViewRef</code></a>s. | |
* | |
* | |
* | |
* @exportedAs angular2/view | |
*/ | |
class ProtoViewRef { | |
} | |
/** | |
* @exportedAs angular2/core | |
*/ | |
class ViewContainerRef { | |
viewManager: AppViewManager; | |
element: ElementRef; | |
clear(): void; | |
get(index: number): ViewRef; | |
length: number; | |
create(protoViewRef?: ProtoViewRef, atIndex?: number, context?: ElementRef, bindings?: ResolvedBinding[]): ViewRef; | |
insert(viewRef: ViewRef, atIndex?: number): ViewRef; | |
indexOf(viewRef: ViewRef): number; | |
remove(atIndex?: number): void; | |
/** | |
* The method can be used together with insert to implement a view move, i.e. | |
* | |
* moving the dom nodes while the directives in the view stay intact. | |
*/ | |
detach(atIndex?: number): ViewRef; | |
} | |
/** | |
* Service for dynamically loading a Component into an arbitrary position in the internal Angular | |
* | |
* application tree. | |
* | |
* | |
* | |
* @exportedAs angular2/view | |
*/ | |
class DynamicComponentLoader { | |
/** | |
* Loads a root component that is placed at the first element that matches the component's | |
* | |
* selector. | |
* | |
* | |
* | |
* The loaded component receives injection normally as a hosted view. | |
*/ | |
loadAsRoot(typeOrBinding: Type | Binding, overrideSelector: string, injector: Injector): Promise<ComponentRef>; | |
/** | |
* Loads a component into the component view of the provided ElementRef | |
* | |
* next to the element with the given name | |
* | |
* The loaded component receives | |
* | |
* injection normally as a hosted view. | |
*/ | |
loadIntoLocation(typeOrBinding: Type | Binding, hostLocation: ElementRef, anchorName: string, bindings?: ResolvedBinding[]): Promise<ComponentRef>; | |
/** | |
* Loads a component next to the provided ElementRef. The loaded component receives | |
* | |
* injection normally as a hosted view. | |
*/ | |
loadNextToLocation(typeOrBinding: Type | Binding, location: ElementRef, bindings?: ResolvedBinding[]): Promise<ComponentRef>; | |
} | |
/** | |
* @exportedAs angular2/view | |
*/ | |
class ComponentRef { | |
location: ElementRef; | |
instance: any; | |
dispose: Function; | |
hostView: ViewRef; | |
} | |
/** | |
* A wrapper around zones that lets you schedule tasks after it has executed a task. | |
* | |
* | |
* | |
* The wrapper maintains an "inner" and an "mount" `Zone`. The application code will executes | |
* | |
* in the "inner" zone unless `runOutsideAngular` is explicitely called. | |
* | |
* | |
* | |
* A typical application will create a singleton `NgZone`. The outer `Zone` is a fork of the root | |
* | |
* `Zone`. The default `onTurnDone` runs the Angular change detection. | |
* | |
* | |
* | |
* @exportedAs angular2/core | |
*/ | |
class NgZone { | |
/** | |
* Initializes the zone hooks. | |
* | |
* | |
* | |
* @param {() => void} onTurnStart called before code executes in the inner zone for each VM turn | |
* | |
* @param {() => void} onTurnDone called at the end of a VM turn if code has executed in the inner | |
* | |
* zone | |
* | |
* @param {(error, stack) => void} onErrorHandler called when an exception is thrown by a macro or | |
* | |
* micro task | |
*/ | |
initCallbacks({onTurnStart, onTurnDone, onErrorHandler}?: { | |
onTurnStart?: /*() => void*/ Function, | |
onTurnDone?: /*() => void*/ Function, | |
onErrorHandler?: /*(error, stack) => void*/ Function | |
}): void; | |
/** | |
* Runs `fn` in the inner zone and returns whatever it returns. | |
* | |
* | |
* | |
* In a typical app where the inner zone is the Angular zone, this allows one to make use of the | |
* | |
* Angular's auto digest mechanism. | |
* | |
* | |
* | |
* ``` | |
* | |
* var zone: NgZone = [ref to the application zone]; | |
* | |
* | |
* | |
* zone.run(() => { | |
* | |
* // the change detection will run after this function and the microtasks it enqueues have | |
* | |
* executed. | |
* | |
* }); | |
* | |
* ``` | |
*/ | |
run(fn: any): any; | |
/** | |
* Runs `fn` in the outer zone and returns whatever it returns. | |
* | |
* | |
* | |
* In a typical app where the inner zone is the Angular zone, this allows one to escape Angular's | |
* | |
* auto-digest mechanism. | |
* | |
* | |
* | |
* ``` | |
* | |
* var zone: NgZone = [ref to the application zone]; | |
* | |
* | |
* | |
* zone.runOusideAngular(() => { | |
* | |
* element.onClick(() => { | |
* | |
* // Clicking on the element would not trigger the change detection | |
* | |
* }); | |
* | |
* }); | |
* | |
* ``` | |
*/ | |
runOutsideAngular(fn: any): any; | |
} | |
class Observable { | |
observer(generator: any): Object; | |
} | |
/** | |
* Use Rx.Observable but provides an adapter to make it work as specified here: | |
* | |
* https://github.com/jhusain/observable-spec | |
* | |
* | |
* | |
* Once a reference implementation of the spec is available, switch to it. | |
*/ | |
class EventEmitter extends Observable { | |
observer(generator: any): Rx.IDisposable; | |
toRx(): Rx.Observable<any>; | |
next(value: any): void; | |
throw(error: any): void; | |
return(value?: any): void; | |
} | |
class ProtoViewFactory { | |
createAppProtoViews(hostComponentBinding: DirectiveBinding, rootRenderProtoView:ProtoViewDto, allDirectives: List<DirectiveBinding>): List<AppProtoView>; | |
} | |
class RenderCompiler { | |
/** | |
* Creats a ProtoViewDto that contains a single nested component with the given componentId. | |
*/ | |
compileHost(directiveMetadata: DirectiveMetadata): Promise<ProtoViewDto>; | |
/** | |
* Compiles a single DomProtoView. Non recursive so that | |
* | |
* we don't need to serialize all possible components over the wire, | |
* | |
* but only the needed ones based on previous calls. | |
*/ | |
compile(view: ViewDefinition): Promise<ProtoViewDto>; | |
} | |
/** | |
* Cache that stores the AppProtoView of the template of a component. | |
* | |
* Used to prevent duplicate work and resolve cyclic dependencies. | |
*/ | |
class CompilerCache { | |
set(component: Type, protoView: AppProtoView): void; | |
get(component: Type): AppProtoView; | |
setHost(component: Type, protoView: AppProtoView): void; | |
getHost(component: Type): AppProtoView; | |
clear(): void; | |
} | |
/** | |
* A collection of the Angular core directives that are likely to be used in each and every Angular | |
* | |
* application. | |
* | |
* | |
* | |
* This collection can be used to quickly enumerate all the built-in directives in the `@View` | |
* | |
* annotation. For example, | |
* | |
* instead of writing: | |
* | |
* | |
* | |
* ``` | |
* | |
* import {If, NgFor, NgSwitch, NgSwitchWhen, NgSwitchDefault} from 'angular2/angular2'; | |
* | |
* import {OtherDirective} from 'myDirectives'; | |
* | |
* | |
* | |
* @Component({ | |
* | |
* selector: 'my-component' | |
* | |
* }) | |
* | |
* @View({ | |
* | |
* templateUrl: 'myComponent.html', | |
* | |
* directives: [If, NgFor, NgSwitch, NgSwitchWhen, NgSwitchDefault, OtherDirective] | |
* | |
* }) | |
* | |
* export class MyComponent { | |
* | |
* ... | |
* | |
* } | |
* | |
* ``` | |
* | |
* one could enumerate all the core directives at once: | |
* | |
* | |
* | |
* ``` | |
* | |
* import {coreDirectives} from 'angular2/angular2'; | |
* | |
* import {OtherDirective} from 'myDirectives'; | |
* | |
* | |
* | |
* @Component({ | |
* | |
* selector: 'my-component' | |
* | |
* }) | |
* | |
* @View({ | |
* | |
* templateUrl: 'myComponent.html', | |
* | |
* directives: [coreDirectives, OtherDirective] | |
* | |
* }) | |
* | |
* export class MyComponent { | |
* | |
* ... | |
* | |
* } | |
* | |
* ``` | |
*/ | |
var coreDirectives : List<Type> ; | |
class CSSClass { | |
rawClass: void; | |
onCheck(): void; | |
} | |
/** | |
* The `NgFor` directive instantiates a template once per item from an iterable. The context for | |
* | |
* each instantiated template inherits from the outer context with the given loop variable set | |
* | |
* to the current item from the iterable. | |
* | |
* | |
* | |
* It is possible to alias the `index` to a local variable that will be set to the current loop | |
* | |
* iteration in the template context. | |
* | |
* | |
* | |
* When the contents of the iterator changes, `NgFor` makes the corresponding changes to the DOM: | |
* | |
* | |
* | |
* * When an item is added, a new instance of the template is added to the DOM. | |
* | |
* * When an item is removed, its template instance is removed from the DOM. | |
* | |
* * When items are reordered, their respective templates are reordered in the DOM. | |
* | |
* | |
* | |
* # Example | |
* | |
* | |
* | |
* ``` | |
* | |
* <ul> | |
* | |
* <li *ng-for="#error of errors; #i = index"> | |
* | |
* Error {{i}} of {{errors.length}}: {{error.message}} | |
* | |
* </li> | |
* | |
* </ul> | |
* | |
* ``` | |
* | |
* | |
* | |
* # Syntax | |
* | |
* | |
* | |
* - `<li *ng-for="#item of items; #i = index">...</li>` | |
* | |
* - `<li template="ng-for #item of items; #i = index">...</li>` | |
* | |
* - `<template ng-for #item [ng-for-of]="items" #i="index"><li>...</li></template>` | |
* | |
* | |
* | |
* @exportedAs angular2/directives | |
*/ | |
class NgFor { | |
viewContainer: ViewContainerRef; | |
protoViewRef: ProtoViewRef; | |
pipes: PipeRegistry; | |
ngForOf: void; | |
onCheck(): void; | |
} | |
/** | |
* Removes or recreates a portion of the DOM tree based on an {expression}. | |
* | |
* | |
* | |
* If the expression assigned to `ng-if` evaluates to a false value then the element | |
* | |
* is removed from the DOM, otherwise a clone of the element is reinserted into the DOM. | |
* | |
* | |
* | |
* # Example: | |
* | |
* | |
* | |
* ``` | |
* | |
* <div *ng-if="errorCount > 0" class="error"> | |
* | |
* <!-- Error message displayed when the errorCount property on the current context is greater | |
* | |
* than 0. --> | |
* | |
* {{errorCount}} errors detected | |
* | |
* </div> | |
* | |
* ``` | |
* | |
* | |
* | |
* # Syntax | |
* | |
* | |
* | |
* - `<div *ng-if="condition">...</div>` | |
* | |
* - `<div template="ng-if condition">...</div>` | |
* | |
* - `<template [ng-if]="condition"><div>...</div></template>` | |
* | |
* | |
* | |
* @exportedAs angular2/directives | |
*/ | |
class NgIf { | |
viewContainer: ViewContainerRef; | |
protoViewRef: ProtoViewRef; | |
prevCondition: boolean; | |
ngIf: void; | |
} | |
/** | |
* The `NgNonBindable` directive tells Angular not to compile or bind the contents of the current | |
* | |
* DOM element. This is useful if the element contains what appears to be Angular directives and | |
* | |
* bindings but which should be ignored by Angular. This could be the case if you have a site that | |
* | |
* displays snippets of code, for instance. | |
* | |
* | |
* | |
* Example: | |
* | |
* | |
* | |
* ``` | |
* | |
* <div>Normal: {{1 + 2}}</div> // output "Normal: 3" | |
* | |
* <div non-bindable>Ignored: {{1 + 2}}</div> // output "Ignored: {{1 + 2}}" | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/directives | |
*/ | |
class NgNonBindable { | |
} | |
class NgStyle { | |
rawStyle: void; | |
onCheck(): void; | |
} | |
class SwitchView { | |
create(): void; | |
destroy(): void; | |
} | |
/** | |
* The `NgSwitch` directive is used to conditionally swap DOM structure on your template based on a | |
* | |
* scope expression. | |
* | |
* Elements within `NgSwitch` but without `NgSwitchWhen` or `NgSwitchDefault` directives will be | |
* | |
* preserved at the location as specified in the template. | |
* | |
* | |
* | |
* `NgSwitch` simply chooses nested elements and makes them visible based on which element matches | |
* | |
* the value obtained from the evaluated expression. In other words, you define a container element | |
* | |
* (where you place the directive), place an expression on the **`[ng-switch]="..."` attribute**), | |
* | |
* define any inner elements inside of the directive and place a `[ng-switch-when]` attribute per | |
* | |
* element. | |
* | |
* The when attribute is used to inform NgSwitch which element to display when the expression is | |
* | |
* evaluated. If a matching expression is not found via a when attribute then an element with the | |
* | |
* default attribute is displayed. | |
* | |
* | |
* | |
* # Example: | |
* | |
* | |
* | |
* ``` | |
* | |
* <ANY [ng-switch]="expression"> | |
* | |
* <template [ng-switch-when]="whenExpression1">...</template> | |
* | |
* <template [ng-switch-when]="whenExpression1">...</template> | |
* | |
* <template ng-switch-default>...</template> | |
* | |
* </ANY> | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/directives | |
*/ | |
class NgSwitch { | |
ngSwitch: void; | |
} | |
/** | |
* Defines a case statement as an expression. | |
* | |
* | |
* | |
* If multiple `NgSwitchWhen` match the `NgSwitch` value, all of them are displayed. | |
* | |
* | |
* | |
* Example: | |
* | |
* | |
* | |
* ``` | |
* | |
* // match against a context variable | |
* | |
* <template [ng-switch-when]="contextVariable">...</template> | |
* | |
* | |
* | |
* // match against a constant string | |
* | |
* <template ng-switch-when="stringValue">...</template> | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/directives | |
*/ | |
class NgSwitchWhen { | |
onDestroy(): void; | |
ngSwitchWhen: void; | |
} | |
/** | |
* Defines a default case statement. | |
* | |
* | |
* | |
* Default case statements are displayed when no `NgSwitchWhen` match the `ng-switch` value. | |
* | |
* | |
* | |
* Example: | |
* | |
* | |
* | |
* ``` | |
* | |
* <template ng-switch-default>...</template> | |
* | |
* ``` | |
* | |
* | |
* | |
* @exportedAs angular2/directives | |
*/ | |
class NgSwitchDefault { | |
} | |
/** | |
* Mock Connection to represent a <a href='/angular2/angular2.api/Connection'><code>Connection</code></a> for tests. | |
*/ | |
class MockConnection { | |
/** | |
* Describes the state of the connection, based on `XMLHttpRequest.readyState`, but with | |
* | |
* additional states. For example, state 5 indicates an aborted connection. | |
*/ | |
readyState: ReadyStates; | |
/** | |
* <a href='/angular2/angular2.api/Request'><code>Request</code></a> instance used to create the connection. | |
*/ | |
request: Request; | |
/** | |
* <a href='/angular2/angular2.api/EventEmitter'><code>EventEmitter</code></a> of <a href='/angular2/angular2.api/Response'><code>Response</code></a>. Can be subscribed to in order to be notified when a | |
* | |
* response is available. | |
*/ | |
response: EventEmitter; | |
/** | |
* Changes the `readyState` of the connection to a custom state of 5 (cancelled). | |
*/ | |
dispose(): void; | |
/** | |
* Sends a mock response to the connection. This response is the value that is emitted to the | |
* | |
* <a href='/angular2/angular2.api/EventEmitter'><code>EventEmitter</code></a> returned by <a href='/angular2/angular2.api/Http'><code>Http</code></a>. | |
* | |
* | |
* | |
* #Example | |
* | |
* | |
* | |
* ``` | |
* | |
* var connection; | |
* | |
* backend.connections.subscribe(c => connection = c); | |
* | |
* http.request('data.json').subscribe(res => console.log(res.text())); | |
* | |
* connection.mockRespond(new Response('fake response')); //logs 'fake response' | |
* | |
* ``` | |
*/ | |
mockRespond(res: Response): void; | |
/** | |
* Not yet implemented! | |
* | |
* | |
* | |
* Sends the provided <a href='/angular2/angular2.api/Response'><code>Response</code></a> to the `downloadObserver` of the `Request` | |
* | |
* associated with this connection. | |
*/ | |
mockDownload(res: Response): void; | |
/** | |
* Emits the provided error object as an error to the <a href='/angular2/angular2.api/Response'><code>Response</code></a> <a href='/angular2/angular2.api/EventEmitter'><code>EventEmitter</code></a> | |
* | |
* returned | |
* | |
* from <a href='/angular2/angular2.api/Http'><code>Http</code></a>. | |
*/ | |
mockError(err?: any): void; | |
} | |
/** | |
* A mock backend for testing the <a href='/angular2/angular2.api/Http'><code>Http</code></a> service. | |
* | |
* | |
* | |
* This class can be injected in tests, and should be used to override bindings | |
* | |
* to other backends, such as <a href='/angular2/angular2.api/XHRBackend'><code>XHRBackend</code></a>. | |
* | |
* | |
* | |
* #Example | |
* | |
* | |
* | |
* ``` | |
* | |
* import {MockBackend, DefaultOptions, Http} from 'angular2/http'; | |
* | |
* it('should get some data', inject([AsyncTestCompleter], (async) => { | |
* | |
* var connection; | |
* | |
* var injector = Injector.resolveAndCreate([ | |
* | |
* MockBackend, | |
* | |
* bind(Http).toFactory((backend, defaultOptions) => { | |
* | |
* return new Http(backend, defaultOptions) | |
* | |
* }, [MockBackend, DefaultOptions])]); | |
* | |
* var http = injector.get(Http); | |
* | |
* var backend = injector.get(MockBackend); | |
* | |
* //Assign any newly-created connection to local variable | |
* | |
* backend.connections.subscribe(c => connection = c); | |
* | |
* http.request('data.json').subscribe((res) => { | |
* | |
* expect(res.text()).toBe('awesome'); | |
* | |
* async.done(); | |
* | |
* }); | |
* | |
* connection.mockRespond(new Response('awesome')); | |
* | |
* })); | |
* | |
* ``` | |
* | |
* | |
* | |
* This method only exists in the mock implementation, not in real Backends. | |
*/ | |
class MockBackend { | |
/** | |
* <a href='/angular2/angular2.api/EventEmitter'><code>EventEmitter</code></a> | |
* | |
* of <a href='/angular2/angular2.api/MockConnection'><code>MockConnection</code></a> instances that have been created by this backend. Can be subscribed | |
* | |
* to in order to respond to connections. | |
* | |
* | |
* | |
* #Example | |
* | |
* | |
* | |
* ``` | |
* | |
* import {MockBackend, Http, BaseRequestOptions} from 'angular2/http'; | |
* | |
* import {Injector} from 'angular2/di'; | |
* | |
* | |
* | |
* it('should get a response', () => { | |
* | |
* var connection; //this will be set when a new connection is emitted from the backend. | |
* | |
* var text; //this will be set from mock response | |
* | |
* var injector = Injector.resolveAndCreate([ | |
* | |
* MockBackend, | |
* | |
* bind(Http).toFactory(backend, options) { | |
* | |
* return new Http(backend, options); | |
* | |
* }, [MockBackend, BaseRequestOptions]]); | |
* | |
* var backend = injector.get(MockBackend); | |
* | |
* var http = injector.get(Http); | |
* | |
* backend.connections.subscribe(c => connection = c); | |
* | |
* http.request('something.json').subscribe(res => { | |
* | |
* text = res.text(); | |
* | |
* }); | |
* | |
* connection.mockRespond(new Response({body: 'Something'})); | |
* | |
* expect(text).toBe('Something'); | |
* | |
* }); | |
* | |
* ``` | |
* | |
* | |
* | |
* This property only exists in the mock implementation, not in real Backends. | |
*/ | |
connections: EventEmitter; | |
/** | |
* An array representation of `connections`. This array will be updated with each connection that | |
* | |
* is created by this backend. | |
* | |
* | |
* | |
* This property only exists in the mock implementation, not in real Backends. | |
*/ | |
connectionsArray: Array<MockConnection>; | |
/** | |
* <a href='/angular2/angular2.api/EventEmitter'><code>EventEmitter</code></a> of <a href='/angular2/angular2.api/MockConnection'><code>MockConnection</code></a> instances that haven't yet been resolved (i.e. | |
* | |
* with a `readyState` | |
* | |
* less than 4). Used internally to verify that no connections are pending via the | |
* | |
* `verifyNoPendingRequests` method. | |
* | |
* | |
* | |
* This property only exists in the mock implementation, not in real Backends. | |
*/ | |
pendingConnections: EventEmitter; | |
/** | |
* Checks all connections, and raises an exception if any connection has not received a response. | |
* | |
* | |
* | |
* This method only exists in the mock implementation, not in real Backends. | |
*/ | |
verifyNoPendingRequests(): void; | |
/** | |
* Can be used in conjunction with `verifyNoPendingRequests` to resolve any not-yet-resolve | |
* | |
* connections, if it's expected that there are connections that have not yet received a response. | |
* | |
* | |
* | |
* This method only exists in the mock implementation, not in real Backends. | |
*/ | |
resolveAllConnections(): void; | |
/** | |
* Creates a new <a href='/angular2/angular2.api/MockConnection'><code>MockConnection</code></a>. This is equivalent to calling `new | |
* | |
* MockConnection()`, except that it also will emit the new `Connection` to the `connections` | |
* | |
* emitter of this `MockBackend` instance. This method will usually only be used by tests | |
* | |
* against the framework itself, not by end-users. | |
*/ | |
createConnection(req: Request): Connection; | |
} | |
/** | |
* Creates `Request` instances from provided values. | |
* | |
* | |
* | |
* The Request's interface is inspired by the Request constructor defined in the [Fetch | |
* | |
* Spec](https://fetch.spec.whatwg.org/#request-class), | |
* | |
* but is considered a static value whose body can be accessed many times. There are other | |
* | |
* differences in the implementation, but this is the most significant. | |
*/ | |
class Request { | |
/** | |
* Http method with which to perform the request. | |
* | |
* | |
* | |
* Defaults to GET. | |
*/ | |
method: RequestMethods; | |
mode: RequestModesOpts; | |
credentials: RequestCredentialsOpts; | |
/** | |
* Headers object based on the `Headers` class in the [Fetch | |
* | |
* Spec](https://fetch.spec.whatwg.org/#headers-class). <a href='/angular2/angular2.api/Headers'><code>Headers</code></a> class reference. | |
*/ | |
headers: Headers; | |
/** | |
* Url of the remote resource | |
*/ | |
url: string; | |
cache: RequestCacheOpts; | |
/** | |
* Returns the request's body as string, assuming that body exists. If body is undefined, return | |
* | |
* empty | |
* | |
* string. | |
*/ | |
text(): String; | |
} | |
/** | |
* Creates `Response` instances from provided values. | |
* | |
* | |
* | |
* Though this object isn't | |
* | |
* usually instantiated by end-users, it is the primary object interacted with when it comes time to | |
* | |
* add data to a view. | |
* | |
* | |
* | |
* #Example | |
* | |
* | |
* | |
* ``` | |
* | |
* http.request('my-friends.txt').subscribe(response => this.friends = response.text()); | |
* | |
* ``` | |
* | |
* | |
* | |
* The Response's interface is inspired by the Response constructor defined in the [Fetch | |
* | |
* Spec](https://fetch.spec.whatwg.org/#response-class), but is considered a static value whose body | |
* | |
* can be accessed many times. There are other differences in the implementation, but this is the | |
* | |
* most significant. | |
*/ | |
class Response { | |
/** | |
* One of "basic", "cors", "default", "error, or "opaque". | |
* | |
* | |
* | |
* Defaults to "default". | |
*/ | |
type: ResponseTypes; | |
/** | |
* True if the response's status is within 200-299 | |
*/ | |
ok: boolean; | |
/** | |
* URL of response. | |
* | |
* | |
* | |
* Defaults to empty string. | |
*/ | |
url: string; | |
/** | |
* Status code returned by server. | |
* | |
* | |
* | |
* Defaults to 200. | |
*/ | |
status: number; | |
/** | |
* Text representing the corresponding reason phrase to the `status`, as defined in [ietf rfc 2616 | |
* | |
* section 6.1.1](https://tools.ietf.org/html/rfc2616#section-6.1.1) | |
* | |
* | |
* | |
* Defaults to "OK" | |
*/ | |
statusText: string; | |
/** | |
* Non-standard property | |
* | |
* | |
* | |
* Denotes how many of the response body's bytes have been loaded, for example if the response is | |
* | |
* the result of a progress event. | |
*/ | |
bytesLoaded: number; | |
/** | |
* Non-standard property | |
* | |
* | |
* | |
* Denotes how many bytes are expected in the final response body. | |
*/ | |
totalBytes: number; | |
/** | |
* Headers object based on the `Headers` class in the [Fetch | |
* | |
* Spec](https://fetch.spec.whatwg.org/#headers-class). | |
*/ | |
headers: Headers; | |
/** | |
* Not yet implemented | |
*/ | |
blob(): any; | |
/** | |
* Attempts to return body as parsed `JSON` object, or raises an exception. | |
*/ | |
json(): Object; | |
/** | |
* Returns the body as a string, presuming `toString()` can be called on the response body. | |
*/ | |
text(): string; | |
/** | |
* Not yet implemented | |
*/ | |
arrayBuffer(): any; | |
} | |
/** | |
* Interface for options to construct a Request, based on | |
* | |
* [RequestInit](https://fetch.spec.whatwg.org/#requestinit) from the Fetch spec. | |
*/ | |
interface IRequestOptions { | |
url?: string; | |
method?: RequestMethods; | |
headers?: Headers; | |
body?: string; | |
mode?: RequestModesOpts; | |
credentials?: RequestCredentialsOpts; | |
cache?: RequestCacheOpts; | |
} | |
/** | |
* Interface for options to construct a Response, based on | |
* | |
* [ResponseInit](https://fetch.spec.whatwg.org/#responseinit) from the Fetch spec. | |
*/ | |
interface IResponseOptions { | |
body?: string | Object | FormData; | |
status?: number; | |
statusText?: string; | |
headers?: Headers; | |
type?: ResponseTypes; | |
url?: string; | |
} | |
/** | |
* Abstract class from which real connections are derived. | |
*/ | |
class Connection { | |
readyState: ReadyStates; | |
request: Request; | |
response: EventEmitter; | |
dispose(): void; | |
} | |
/** | |
* Abstract class from which real backends are derived. | |
* | |
* | |
* | |
* The primary purpose of a `ConnectionBackend` is to create new connections to fulfill a given | |
* | |
* <a href='/angular2/angular2.api/Request'><code>Request</code></a>. | |
*/ | |
class ConnectionBackend { | |
createConnection(request: any): Connection; | |
} | |
/** | |
* Injectable version of <a href='/angular2/angular2.api/RequestOptions'><code>RequestOptions</code></a>, with overridable default values. | |
* | |
* | |
* | |
* #Example | |
* | |
* | |
* | |
* ``` | |
* | |
* import {Http, BaseRequestOptions, Request} from 'angular2/http'; | |
* | |
* ... | |
* | |
* class MyComponent { | |
* | |
* constructor(baseRequestOptions:BaseRequestOptions, http:Http) { | |
* | |
* var options = baseRequestOptions.merge({body: 'foobar', url: 'https://foo'}); | |
* | |
* var request = new Request(options); | |
* | |
* http.request(request).subscribe(res => this.bars = res.json()); | |
* | |
* } | |
* | |
* } | |
* | |
* | |
* | |
* ``` | |
*/ | |
class BaseRequestOptions extends RequestOptions { | |
} | |
/** | |
* Creates a request options object similar to the `RequestInit` description | |
* | |
* in the [Fetch | |
* | |
* Spec](https://fetch.spec.whatwg.org/#requestinit) to be optionally provided when instantiating a | |
* | |
* <a href='/angular2/angular2.api/Request'><code>Request</code></a>. | |
* | |
* | |
* | |
* All values are null by default. | |
*/ | |
class RequestOptions implements IRequestOptions { | |
/** | |
* Http method with which to execute the request. | |
* | |
* | |
* | |
* Defaults to "GET". | |
*/ | |
method: RequestMethods; | |
/** | |
* Headers object based on the `Headers` class in the [Fetch | |
* | |
* Spec](https://fetch.spec.whatwg.org/#headers-class). | |
*/ | |
headers: Headers; | |
/** | |
* Body to be used when creating the request. | |
*/ | |
body: string; | |
mode: RequestModesOpts; | |
credentials: RequestCredentialsOpts; | |
cache: RequestCacheOpts; | |
url: string; | |
/** | |
* Creates a copy of the `RequestOptions` instance, using the optional input as values to override | |
* | |
* existing values. | |
*/ | |
merge(options?: IRequestOptions): RequestOptions; | |
} | |
/** | |
* Injectable version of <a href='/angular2/angular2.api/ResponseOptions'><code>ResponseOptions</code></a>, with overridable default values. | |
*/ | |
class BaseResponseOptions extends ResponseOptions { | |
body: string | Object | ArrayBuffer | JSON | FormData | Blob; | |
status: number; | |
headers: Headers; | |
statusText: string; | |
type: ResponseTypes; | |
url: string; | |
} | |
/** | |
* Creates a response options object similar to the | |
* | |
* [ResponseInit](https://fetch.spec.whatwg.org/#responseinit) description | |
* | |
* in the Fetch | |
* | |
* Spec to be optionally provided when instantiating a | |
* | |
* <a href='/angular2/angular2.api/Response'><code>Response</code></a>. | |
* | |
* | |
* | |
* All values are null by default. | |
*/ | |
class ResponseOptions implements IResponseOptions { | |
body: string | Object; | |
status: number; | |
headers: Headers; | |
statusText: string; | |
type: ResponseTypes; | |
url: string; | |
merge(options?: IResponseOptions): ResponseOptions; | |
} | |
/** | |
* Creates <a href='/angular2/angular2.api/XHRConnection'><code>XHRConnection</code></a> instances. | |
* | |
* | |
* | |
* This class would typically not be used by end users, but could be | |
* | |
* overridden if a different backend implementation should be used, | |
* | |
* such as in a node backend. | |
* | |
* | |
* | |
* #Example | |
* | |
* | |
* | |
* ``` | |
* | |
* import {Http, MyNodeBackend, httpInjectables, BaseRequestOptions} from 'angular2/http'; | |
* | |
* @Component({ | |
* | |
* viewInjector: [ | |
* | |
* httpInjectables, | |
* | |
* bind(Http).toFactory((backend, options) => { | |
* | |
* return new Http(backend, options); | |
* | |
* }, [MyNodeBackend, BaseRequestOptions])] | |
* | |
* }) | |
* | |
* class MyComponent { | |
* | |
* constructor(http:Http) { | |
* | |
* http('people.json').subscribe(res => this.people = res.json()); | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
*/ | |
class XHRBackend implements ConnectionBackend { | |
createConnection(request: Request): XHRConnection; | |
} | |
/** | |
* Creates connections using `XMLHttpRequest`. Given a fully-qualified | |
* | |
* request, an `XHRConnection` will immediately create an `XMLHttpRequest` object and send the | |
* | |
* request. | |
* | |
* | |
* | |
* This class would typically not be created or interacted with directly inside applications, though | |
* | |
* the <a href='/angular2/angular2.api/MockConnection'><code>MockConnection</code></a> may be interacted with in tests. | |
*/ | |
class XHRConnection implements Connection { | |
request: Request; | |
/** | |
* Response <a href='/angular2/angular2.api/EventEmitter'><code>EventEmitter</code></a> which emits a single <a href='/angular2/angular2.api/Response'><code>Response</code></a> value on load event of | |
* | |
* `XMLHttpRequest`. | |
*/ | |
response: EventEmitter; | |
readyState: ReadyStates; | |
/** | |
* Calls abort on the underlying XMLHttpRequest. | |
*/ | |
dispose(): void; | |
} | |
/** | |
* Performs http requests using `XMLHttpRequest` as the default backend. | |
* | |
* | |
* | |
* `Http` is available as an injectable class, with methods to perform http requests. Calling | |
* | |
* `request` returns an <a href='/angular2/angular2.api/EventEmitter'><code>EventEmitter</code></a> which will emit a single <a href='/angular2/angular2.api/Response'><code>Response</code></a> when a | |
* | |
* response is received. | |
* | |
* | |
* | |
* | |
* | |
* ## Breaking Change | |
* | |
* | |
* | |
* Previously, methods of `Http` would return an RxJS Observable directly. For now, | |
* | |
* the `toRx()` method of <a href='/angular2/angular2.api/EventEmitter'><code>EventEmitter</code></a> needs to be called in order to get the RxJS | |
* | |
* Subject. `EventEmitter` does not provide combinators like `map`, and has different semantics for | |
* | |
* subscribing/observing. This is temporary; the result of all `Http` method calls will be either an | |
* | |
* Observable | |
* | |
* or Dart Stream when [issue #2794](https://github.com/angular/angular/issues/2794) is resolved. | |
* | |
* | |
* | |
* #Example | |
* | |
* | |
* | |
* ``` | |
* | |
* import {Http, httpInjectables} from 'angular2/http'; | |
* | |
* @Component({selector: 'http-app', viewInjector: [httpInjectables]}) | |
* | |
* @View({templateUrl: 'people.html'}) | |
* | |
* class PeopleComponent { | |
* | |
* constructor(http: Http) { | |
* | |
* http.get('people.json') | |
* | |
* //Get the RxJS Subject | |
* | |
* .toRx() | |
* | |
* // Call map on the response observable to get the parsed people object | |
* | |
* .map(res => res.json()) | |
* | |
* // Subscribe to the observable to get the parsed people object and attach it to the | |
* | |
* // component | |
* | |
* .subscribe(people => this.people = people); | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
* | |
* | |
* | |
* To use the <a href='/angular2/angular2.api/EventEmitter'><code>EventEmitter</code></a> returned by `Http`, simply pass a generator (See "interface | |
* | |
* Generator" in the Async Generator spec: https://github.com/jhusain/asyncgenerator) to the | |
* | |
* `observer` method of the returned emitter, with optional methods of `next`, `throw`, and `return`. | |
* | |
* | |
* | |
* #Example | |
* | |
* | |
* | |
* ``` | |
* | |
* http.get('people.json').observer({next: (value) => this.people = people}); | |
* | |
* ``` | |
* | |
* | |
* | |
* The default construct used to perform requests, `XMLHttpRequest`, is abstracted as a "Backend" ( | |
* | |
* <a href='/angular2/angular2.api/XHRBackend'><code>XHRBackend</code></a> in this case), which could be mocked with dependency injection by replacing | |
* | |
* the <a href='/angular2/angular2.api/XHRBackend'><code>XHRBackend</code></a> binding, as in the following example: | |
* | |
* | |
* | |
* #Example | |
* | |
* | |
* | |
* ``` | |
* | |
* import {MockBackend, BaseRequestOptions, Http} from 'angular2/http'; | |
* | |
* var injector = Injector.resolveAndCreate([ | |
* | |
* BaseRequestOptions, | |
* | |
* MockBackend, | |
* | |
* bind(Http).toFactory( | |
* | |
* function(backend, defaultOptions) { | |
* | |
* return new Http(backend, defaultOptions); | |
* | |
* }, | |
* | |
* [MockBackend, BaseRequestOptions]) | |
* | |
* ]); | |
* | |
* var http = injector.get(Http); | |
* | |
* http.get('request-from-mock-backend.json').toRx().subscribe((res:Response) => doSomething(res)); | |
* | |
* ``` | |
*/ | |
class Http { | |
/** | |
* Performs any type of http request. First argument is required, and can either be a url or | |
* | |
* a <a href='/angular2/angular2.api/Request'><code>Request</code></a> instance. If the first argument is a url, an optional <a href='/angular2/angular2.api/RequestOptions'><code>RequestOptions</code></a> | |
* | |
* object can be provided as the 2nd argument. The options object will be merged with the values | |
* | |
* of <a href='/angular2/angular2.api/BaseRequestOptions'><code>BaseRequestOptions</code></a> before performing the request. | |
*/ | |
request(url: string | Request, options?: IRequestOptions): EventEmitter; | |
/** | |
* Performs a request with `get` http method. | |
*/ | |
get(url: string, options?: IRequestOptions): EventEmitter; | |
/** | |
* Performs a request with `post` http method. | |
*/ | |
post(url: string, body: string, options?: IRequestOptions): EventEmitter; | |
/** | |
* Performs a request with `put` http method. | |
*/ | |
put(url: string, body: string, options?: IRequestOptions): EventEmitter; | |
/** | |
* Performs a request with `delete` http method. | |
*/ | |
delete(url: string, options?: IRequestOptions): EventEmitter; | |
/** | |
* Performs a request with `patch` http method. | |
*/ | |
patch(url: string, body: string, options?: IRequestOptions): EventEmitter; | |
/** | |
* Performs a request with `head` http method. | |
*/ | |
head(url: string, options?: IRequestOptions): EventEmitter; | |
} | |
/** | |
* Polyfill for [Headers](https://developer.mozilla.org/en-US/docs/Web/API/Headers/Headers), as | |
* | |
* specified in the [Fetch Spec](https://fetch.spec.whatwg.org/#headers-class). The only known | |
* | |
* difference from the spec is the lack of an `entries` method. | |
*/ | |
class Headers { | |
/** | |
* Appends a header to existing list of header values for a given header name. | |
*/ | |
append(name: string, value: string): void; | |
/** | |
* Deletes all header values for the given name. | |
*/ | |
delete(name: string): void; | |
forEach(fn: Function): void; | |
/** | |
* Returns first header that matches given name. | |
*/ | |
get(header: string): string; | |
/** | |
* Check for existence of header by given name. | |
*/ | |
has(header: string): boolean; | |
/** | |
* Provides names of set headers | |
*/ | |
keys(): List<string>; | |
/** | |
* Sets or overrides header value for given name. | |
*/ | |
set(header: string, value: string | List<string>): void; | |
/** | |
* Returns values of all headers. | |
*/ | |
values(): List<List<string>>; | |
/** | |
* Returns list of header values for a given name. | |
*/ | |
getAll(header: string): Array<string>; | |
/** | |
* This method is not implemented. | |
*/ | |
entries(): void; | |
} | |
/** | |
* Acceptable response types to be associated with a <a href='/angular2/angular2.api/Response'><code>Response</code></a>, based on | |
* | |
* [ResponseType](https://fetch.spec.whatwg.org/#responsetype) from the Fetch spec. | |
*/ | |
enum ResponseTypes { | |
Basic, | |
Cors, | |
Default, | |
Error, | |
Opaque | |
} | |
/** | |
* All possible states in which a connection can be, based on | |
* | |
* [States](http://www.w3.org/TR/XMLHttpRequest/#states) from the `XMLHttpRequest` spec, but with an | |
* | |
* additional "CANCELLED" state. | |
*/ | |
enum ReadyStates { | |
UNSENT, | |
OPEN, | |
HEADERS_RECEIVED, | |
LOADING, | |
DONE, | |
CANCELLED | |
} | |
/** | |
* Supported http methods. | |
*/ | |
enum RequestMethods { | |
GET, | |
POST, | |
PUT, | |
DELETE, | |
OPTIONS, | |
HEAD, | |
PATCH | |
} | |
/** | |
* Acceptable credentials option to be associated with a <a href='/angular2/angular2.api/Request'><code>Request</code></a>, based on | |
* | |
* [RequestCredentials](https://fetch.spec.whatwg.org/#requestcredentials) from the Fetch spec. | |
*/ | |
enum RequestCredentialsOpts { | |
Omit, | |
SameOrigin, | |
Include | |
} | |
/** | |
* Acceptable cache option to be associated with a <a href='/angular2/angular2.api/Request'><code>Request</code></a>, based on | |
* | |
* [RequestCache](https://fetch.spec.whatwg.org/#requestcache) from the Fetch spec. | |
*/ | |
enum RequestCacheOpts { | |
Default, | |
NoStore, | |
Reload, | |
NoCache, | |
ForceCache, | |
OnlyIfCached | |
} | |
/** | |
* Acceptable origin modes to be associated with a <a href='/angular2/angular2.api/Request'><code>Request</code></a>, based on | |
* | |
* [RequestMode](https://fetch.spec.whatwg.org/#requestmode) from the Fetch spec. | |
*/ | |
enum RequestModesOpts { | |
Cors, | |
NoCors, | |
SameOrigin | |
} | |
/** | |
* Map-like representation of url search parameters, based on | |
* | |
* [URLSearchParams](https://url.spec.whatwg.org/#urlsearchparams) in the url living standard. | |
*/ | |
class URLSearchParams { | |
paramsMap: Map<string, List<string>>; | |
rawParams: string; | |
has(param: string): boolean; | |
get(param: string): string; | |
getAll(param: string): List<string>; | |
append(param: string, val: string): void; | |
toString(): string; | |
delete(param: any): void; | |
} | |
/** | |
* Provides a basic set of injectables to use the <a href='/angular2/angular2.api/Http'><code>Http</code></a> service in any application. | |
* | |
* | |
* | |
* #Example | |
* | |
* | |
* | |
* ``` | |
* | |
* import {httpInjectables, Http} from 'angular2/http'; | |
* | |
* @Component({selector: 'http-app', viewInjector: [httpInjectables]}) | |
* | |
* @View({template: '{{data}}'}) | |
* | |
* class MyApp { | |
* | |
* constructor(http:Http) { | |
* | |
* http.request('data.txt').subscribe(res => this.data = res.text()); | |
* | |
* } | |
* | |
* } | |
* | |
* ``` | |
*/ | |
var httpInjectables : List<any> ; | |
/** | |
* General notes: | |
* | |
* | |
* | |
* The methods for creating / destroying views in this API are used in the AppViewHydrator | |
* | |
* and RenderViewHydrator as well. | |
* | |
* | |
* | |
* We are already parsing expressions on the render side: | |
* | |
* - this makes the ElementBinders more compact | |
* | |
* (e.g. no need to distinguish interpolations from regular expressions from literals) | |
* | |
* - allows to retrieve which properties should be accessed from the event | |
* | |
* by looking at the expression | |
* | |
* - we need the parse at least for the `template` attribute to match | |
* | |
* directives in it | |
* | |
* - render compiler is not on the critical path as | |
* | |
* its output will be stored in precompiled templates. | |
*/ | |
class EventBinding { | |
fullName: string; | |
source: ASTWithSource; | |
} | |
enum PropertyBindingType { | |
PROPERTY, | |
ATTRIBUTE, | |
CLASS, | |
STYLE | |
} | |
class ElementPropertyBinding { | |
type: PropertyBindingType; | |
astWithSource: ASTWithSource; | |
property: string; | |
unit: string; | |
} | |
class ElementBinder { | |
index: number; | |
parentIndex: number; | |
distanceToParent: number; | |
directives: List<DirectiveBinder>; | |
nestedProtoView: ProtoViewDto; | |
propertyBindings: List<ElementPropertyBinding>; | |
variableBindings: Map<string, string>; | |
eventBindings: List<EventBinding>; | |
textBindings: List<ASTWithSource>; | |
readAttributes: Map<string, string>; | |
} | |
class DirectiveBinder { | |
directiveIndex: number; | |
propertyBindings: Map<string, ASTWithSource>; | |
eventBindings: List<EventBinding>; | |
hostPropertyBindings: List<ElementPropertyBinding>; | |
} | |
enum ViewType { | |
HOST, | |
COMPONENT, | |
EMBEDDED | |
} | |
class ProtoViewDto { | |
render: RenderProtoViewRef; | |
elementBinders: List<ElementBinder>; | |
variableBindings: Map<string, string>; | |
type: ViewType; | |
} | |
class DirectiveMetadata { | |
id: any; | |
selector: string; | |
compileChildren: boolean; | |
events: List<string>; | |
properties: List<string>; | |
readAttributes: List<string>; | |
type: number; | |
callOnDestroy: boolean; | |
callOnChange: boolean; | |
callOnCheck: boolean; | |
callOnInit: boolean; | |
callOnAllChangesDone: boolean; | |
changeDetection: string; | |
exportAs: string; | |
hostListeners: Map<string, string>; | |
hostProperties: Map<string, string>; | |
hostAttributes: Map<string, string>; | |
hostActions: Map<string, string>; | |
} | |
class RenderProtoViewRef { | |
} | |
class RenderViewRef { | |
} | |
class ViewDefinition { | |
componentId: string; | |
templateAbsUrl: string; | |
template: string; | |
directives: List<DirectiveMetadata>; | |
styleAbsUrls: List<string>; | |
styles: List<string>; | |
} | |
class Renderer { | |
/** | |
* Creates a root host view that includes the given element. | |
* | |
* @param {RenderProtoViewRef} hostProtoViewRef a RenderProtoViewRef of type | |
* | |
* ProtoViewDto.HOST_VIEW_TYPE | |
* | |
* @param {any} hostElementSelector css selector for the host element (will be queried against the | |
* | |
* main document) | |
* | |
* @return {RenderViewRef} the created view | |
*/ | |
createRootHostView(hostProtoViewRef: RenderProtoViewRef, hostElementSelector: string): RenderViewRef; | |
/** | |
* Creates a regular view out of the given ProtoView | |
*/ | |
createView(protoViewRef: RenderProtoViewRef): RenderViewRef; | |
/** | |
* Destroys the given view after it has been dehydrated and detached | |
*/ | |
destroyView(viewRef: RenderViewRef): void; | |
/** | |
* Attaches a componentView into the given hostView at the given element | |
*/ | |
attachComponentView(location: RenderElementRef, componentViewRef: RenderViewRef): void; | |
/** | |
* Detaches a componentView into the given hostView at the given element | |
*/ | |
detachComponentView(location: RenderElementRef, componentViewRef: RenderViewRef): void; | |
/** | |
* Attaches a view into a ViewContainer (in the given parentView at the given element) at the | |
* | |
* given index. | |
*/ | |
attachViewInContainer(location: RenderElementRef, atIndex: number, viewRef: RenderViewRef): void; | |
/** | |
* Detaches a view into a ViewContainer (in the given parentView at the given element) at the | |
* | |
* given index. | |
*/ | |
detachViewInContainer(location: RenderElementRef, atIndex: number, viewRef: RenderViewRef): void; | |
/** | |
* Hydrates a view after it has been attached. Hydration/dehydration is used for reusing views | |
* | |
* inside of the view pool. | |
*/ | |
hydrateView(viewRef: RenderViewRef): void; | |
/** | |
* Dehydrates a view after it has been attached. Hydration/dehydration is used for reusing views | |
* | |
* inside of the view pool. | |
*/ | |
dehydrateView(viewRef: RenderViewRef): void; | |
/** | |
* Returns the native element at the given location. | |
* | |
* Attention: In a WebWorker scenario, this should always return null! | |
*/ | |
getNativeElementSync(location: RenderElementRef): any; | |
/** | |
* Sets a property on an element. | |
*/ | |
setElementProperty(location: RenderElementRef, propertyName: string, propertyValue: any): void; | |
/** | |
* Sets an attribute on an element. | |
*/ | |
setElementAttribute(location: RenderElementRef, attributeName: string, attributeValue: string): void; | |
/** | |
* Sets a class on an element. | |
*/ | |
setElementClass(location: RenderElementRef, className: string, isAdd: boolean): void; | |
/** | |
* Sets a style on an element. | |
*/ | |
setElementStyle(location: RenderElementRef, styleName: string, styleValue: string): void; | |
/** | |
* Calls a method on an element. | |
*/ | |
invokeElementMethod(location: RenderElementRef, methodName: string, args: List<any>): void; | |
/** | |
* Sets the value of a text node. | |
*/ | |
setText(viewRef: RenderViewRef, textNodeIndex: number, text: string): void; | |
/** | |
* Sets the dispatcher for all events of the given view | |
*/ | |
setEventDispatcher(viewRef: RenderViewRef, dispatcher: EventDispatcher): void; | |
} | |
/** | |
* A dispatcher for all events happening in a view. | |
*/ | |
interface EventDispatcher { | |
/** | |
* Called when an event was triggered for a on-* attribute on an element. | |
* | |
* @param {Map<string, any>} locals Locals to be used to evaluate the | |
* | |
* event expressions | |
*/ | |
dispatchEvent(elementIndex: number, eventName: string, locals: Map<string, any>): void; | |
} | |
class TreeNode<T extends TreeNode<any>> { | |
/** | |
* Adds a child to the parent node. The child MUST NOT be a part of a tree. | |
*/ | |
addChild(child: T): void; | |
/** | |
* Adds a child to the parent node after a given sibling. | |
* | |
* The child MUST NOT be a part of a tree and the sibling must be present. | |
*/ | |
addChildAfter(child: T, prevSibling: T): void; | |
/** | |
* Detaches a node from the parent's tree. | |
*/ | |
remove(): void; | |
parent: void; | |
children: T[]; | |
} | |
class DirectiveDependency extends Dependency { | |
attributeName: string; | |
queryDecorator: Query; | |
} | |
class DirectiveBinding extends ResolvedBinding { | |
resolvedHostInjectables: List<ResolvedBinding>; | |
resolvedViewInjectables: List<ResolvedBinding>; | |
metadata: DirectiveMetadata; | |
callOnDestroy: boolean; | |
callOnChange: boolean; | |
callOnAllChangesDone: boolean; | |
displayName: string; | |
eventEmitters: List<string>; | |
hostActions: Map<string, string>; | |
changeDetection: void; | |
} | |
class PreBuiltObjects { | |
viewManager: AppViewManager; | |
view: AppView; | |
protoView: AppProtoView; | |
} | |
class EventEmitterAccessor { | |
eventName: string; | |
getter: Function; | |
subscribe(view:AppView, boundElementIndex: number, directive: Object): Object; | |
} | |
class HostActionAccessor { | |
methodName: string; | |
getter: Function; | |
subscribe(view:AppView, boundElementIndex: number, directive: Object): Object; | |
} | |
class ProtoElementInjector { | |
view: AppView; | |
attributes: Map<string, string>; | |
eventEmitterAccessors: List<List<EventEmitterAccessor>>; | |
hostActionAccessors: List<List<HostActionAccessor>>; | |
protoInjector: ProtoInjector; | |
parent: ProtoElementInjector; | |
index: int; | |
distanceToParent: number; | |
directiveVariableBindings: Map<string, number>; | |
instantiate(parent: ElementInjector): ElementInjector; | |
directParent(): ProtoElementInjector; | |
hasBindings: boolean; | |
getBindingAtIndex(index: number): any; | |
} | |
class ElementInjector extends TreeNode<ElementInjector> implements DependencyProvider { | |
hydrated: boolean; | |
dehydrate(): void; | |
onAllChangesDone(): void; | |
hydrate(imperativelyCreatedInjector: Injector, host: ElementInjector, preBuiltObjects: PreBuiltObjects): void; | |
hasVariableBinding(name: string): boolean; | |
getVariableBinding(name: string): any; | |
get(token: any): any; | |
hasDirective(type: Type): boolean; | |
getEventEmitterAccessors(): List<List<EventEmitterAccessor>>; | |
getHostActionAccessors(): List<List<HostActionAccessor>>; | |
getDirectiveVariableBindings(): Map<string, number>; | |
getComponent(): any; | |
getElementRef(): ElementRef; | |
getViewContainerRef(): ViewContainerRef; | |
directParent(): ElementInjector; | |
isComponentKey(key: Key): boolean; | |
getDependency(injector: Injector, binding: ResolvedBinding, dep: Dependency): any; | |
addDirectivesMatchingQuery(query: Query, list: any[]): void; | |
link(parent: ElementInjector): void; | |
linkAfter(parent: ElementInjector, prevSibling: ElementInjector): void; | |
unlink(): void; | |
getDirectiveAtIndex(index: number): any; | |
hasInstances(): boolean; | |
getHost(): ElementInjector; | |
getBoundElementIndex(): number; | |
} | |
class QueryError extends BaseException { | |
message: string; | |
toString(): string; | |
} | |
class QueryRef { | |
query: Query; | |
list: QueryList<any>; | |
originator: ElementInjector; | |
update(): void; | |
visit(inj: ElementInjector, aggregator: any[]): void; | |
} | |
class AST { | |
eval(context: any, locals: Locals): void; | |
isAssignable: boolean; | |
assign(context: any, locals: Locals, value: any): void; | |
visit(visitor: AstVisitor): any; | |
toString(): string; | |
} | |
class EmptyExpr extends AST { | |
eval(context: any, locals: Locals): any; | |
visit(visitor: AstVisitor): void; | |
} | |
class ImplicitReceiver extends AST { | |
eval(context: any, locals: Locals): any; | |
visit(visitor: AstVisitor): any; | |
} | |
/** | |
* Multiple expressions separated by a semicolon. | |
*/ | |
class Chain extends AST { | |
expressions: List<any>; | |
eval(context: any, locals: Locals): any; | |
visit(visitor: AstVisitor): any; | |
} | |
class Conditional extends AST { | |
condition: AST; | |
trueExp: AST; | |
falseExp: AST; | |
eval(context: any, locals: Locals): any; | |
visit(visitor: AstVisitor): any; | |
} | |
class If extends AST { | |
condition: AST; | |
trueExp: AST; | |
falseExp: AST; | |
eval(context: any, locals: any): void; | |
visit(visitor: AstVisitor): any; | |
} | |
class AccessMember extends AST { | |
receiver: AST; | |
name: string; | |
getter: Function; | |
setter: Function; | |
eval(context: any, locals: Locals): any; | |
isAssignable: boolean; | |
assign(context: any, locals: Locals, value: any): any; | |
visit(visitor: AstVisitor): any; | |
} | |
class SafeAccessMember extends AST { | |
receiver: AST; | |
name: string; | |
getter: Function; | |
setter: Function; | |
eval(context: any, locals: Locals): any; | |
visit(visitor: AstVisitor): any; | |
} | |
class KeyedAccess extends AST { | |
obj: AST; | |
key: AST; | |
eval(context: any, locals: Locals): any; | |
isAssignable: boolean; | |
assign(context: any, locals: Locals, value: any): any; | |
visit(visitor: AstVisitor): any; | |
} | |
class BindingPipe extends AST { | |
exp: AST; | |
name: string; | |
args: List<any>; | |
visit(visitor: AstVisitor): any; | |
} | |
class LiteralPrimitive extends AST { | |
value: void; | |
eval(context: any, locals: Locals): any; | |
visit(visitor: AstVisitor): any; | |
} | |
class LiteralArray extends AST { | |
expressions: List<any>; | |
eval(context: any, locals: Locals): any; | |
visit(visitor: AstVisitor): any; | |
} | |
class LiteralMap extends AST { | |
keys: List<any>; | |
values: List<any>; | |
eval(context: any, locals: Locals): any; | |
visit(visitor: AstVisitor): any; | |
} | |
class Interpolation extends AST { | |
strings: List<any>; | |
expressions: List<any>; | |
eval(context: any, locals: any): any; | |
visit(visitor: AstVisitor): void; | |
} | |
class Binary extends AST { | |
operation: string; | |
left: AST; | |
right: AST; | |
eval(context: any, locals: Locals): any; | |
visit(visitor: AstVisitor): any; | |
} | |
class PrefixNot extends AST { | |
expression: AST; | |
eval(context: any, locals: Locals): any; | |
visit(visitor: AstVisitor): any; | |
} | |
class Assignment extends AST { | |
target: AST; | |
value: AST; | |
eval(context: any, locals: Locals): any; | |
visit(visitor: AstVisitor): any; | |
} | |
class MethodCall extends AST { | |
receiver: AST; | |
name: string; | |
fn: Function; | |
args: List<any>; | |
eval(context: any, locals: Locals): any; | |
visit(visitor: AstVisitor): any; | |
} | |
class SafeMethodCall extends AST { | |
receiver: AST; | |
name: string; | |
fn: Function; | |
args: List<any>; | |
eval(context: any, locals: Locals): any; | |
visit(visitor: AstVisitor): any; | |
} | |
class FunctionCall extends AST { | |
target: AST; | |
args: List<any>; | |
eval(context: any, locals: Locals): any; | |
visit(visitor: AstVisitor): any; | |
} | |
class ASTWithSource extends AST { | |
ast: AST; | |
source: string; | |
location: string; | |
eval(context: any, locals: Locals): any; | |
isAssignable: boolean; | |
assign(context: any, locals: Locals, value: any): any; | |
visit(visitor: AstVisitor): any; | |
toString(): string; | |
} | |
class TemplateBinding { | |
key: string; | |
keyIsVar: boolean; | |
name: string; | |
expression: ASTWithSource; | |
} | |
interface AstVisitor { | |
visitAccessMember(ast: AccessMember): any; | |
visitAssignment(ast: Assignment): any; | |
visitBinary(ast: Binary): any; | |
visitChain(ast: Chain): any; | |
visitConditional(ast: Conditional): any; | |
visitIf(ast: If): any; | |
visitPipe(ast: BindingPipe): any; | |
visitFunctionCall(ast: FunctionCall): any; | |
visitImplicitReceiver(ast: ImplicitReceiver): any; | |
visitInterpolation(ast: Interpolation): any; | |
visitKeyedAccess(ast: KeyedAccess): any; | |
visitLiteralArray(ast: LiteralArray): any; | |
visitLiteralMap(ast: LiteralMap): any; | |
visitLiteralPrimitive(ast: LiteralPrimitive): any; | |
visitMethodCall(ast: MethodCall): any; | |
visitPrefixNot(ast: PrefixNot): any; | |
visitSafeAccessMember(ast: SafeAccessMember): any; | |
visitSafeMethodCall(ast: SafeMethodCall): any; | |
} | |
class AstTransformer implements AstVisitor { | |
visitImplicitReceiver(ast: ImplicitReceiver): ImplicitReceiver; | |
visitInterpolation(ast: Interpolation): Interpolation; | |
visitLiteralPrimitive(ast: LiteralPrimitive): LiteralPrimitive; | |
visitAccessMember(ast: AccessMember): AccessMember; | |
visitSafeAccessMember(ast: SafeAccessMember): SafeAccessMember; | |
visitMethodCall(ast: MethodCall): MethodCall; | |
visitSafeMethodCall(ast: SafeMethodCall): SafeMethodCall; | |
visitFunctionCall(ast: FunctionCall): FunctionCall; | |
visitLiteralArray(ast: LiteralArray): LiteralArray; | |
visitLiteralMap(ast: LiteralMap): LiteralMap; | |
visitBinary(ast: Binary): Binary; | |
visitPrefixNot(ast: PrefixNot): PrefixNot; | |
visitConditional(ast: Conditional): Conditional; | |
visitPipe(ast: BindingPipe): BindingPipe; | |
visitKeyedAccess(ast: KeyedAccess): KeyedAccess; | |
visitAll(asts: List<any>): List<any>; | |
visitChain(ast: Chain): Chain; | |
visitAssignment(ast: Assignment): Assignment; | |
visitIf(ast: If): If; | |
} | |
} | |
declare module "angular2/angular2" { | |
export = ng; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Type definitions for Angular v2.0.0-local_sha.6c933a4 | |
// Project: http://angular.io/ | |
// Definitions by: angular team <https://github.com/angular/> | |
// Definitions: https://github.com/borisyankov/DefinitelyTyped | |
// *********************************************************** | |
// This file is generated by the Angular build process. | |
// Please do not create manual edits or send pull requests | |
// modifying this file. | |
// *********************************************************** | |
/** | |
* @module | |
* | |
* @public | |
* | |
* @description | |
* | |
* Maps application URLs into application states, to support deep-linking and navigation. | |
*/ | |
declare module ng { | |
/** | |
* # Router | |
* | |
* The router is responsible for mapping URLs to components. | |
* | |
* | |
* | |
* You can see the state of the router by inspecting the read-only field `router.navigating`. | |
* | |
* This may be useful for showing a spinner, for instance. | |
* | |
* | |
* | |
* ## Concepts | |
* | |
* Routers and component instances have a 1:1 correspondence. | |
* | |
* | |
* | |
* The router holds reference to a number of "outlets." An outlet is a placeholder that the | |
* | |
* router dynamically fills in depending on the current URL. | |
* | |
* | |
* | |
* When the router navigates from a URL, it must first recognizes it and serialize it into an | |
* | |
* `Instruction`. | |
* | |
* The router uses the `RouteRegistry` to get an `Instruction`. | |
* | |
* | |
* | |
* @exportedAs angular2/router | |
*/ | |
class Router { | |
navigating: boolean; | |
lastNavigationAttempt: string; | |
previousUrl: string; | |
registry: RouteRegistry; | |
parent: Router; | |
hostComponent: any; | |
/** | |
* Constructs a child router. You probably don't need to use this unless you're writing a reusable | |
* | |
* component. | |
*/ | |
childRouter(hostComponent: any): Router; | |
/** | |
* Register an object to notify of route changes. You probably don't need to use this unless | |
* | |
* you're writing a reusable component. | |
*/ | |
registerOutlet(outlet: RouterOutlet): Promise<boolean>; | |
/** | |
* Dynamically update the routing configuration and trigger a navigation. | |
* | |
* | |
* | |
* # Usage | |
* | |
* | |
* | |
* ``` | |
* | |
* router.config({ 'path': '/', 'component': IndexCmp}); | |
* | |
* ``` | |
* | |
* | |
* | |
* Or: | |
* | |
* | |
* | |
* ``` | |
* | |
* router.config([ | |
* | |
* { 'path': '/', 'component': IndexComp }, | |
* | |
* { 'path': '/user/:id', 'component': UserComp }, | |
* | |
* ]); | |
* | |
* ``` | |
*/ | |
config(config: StringMap<string, any>| List<StringMap<string, any>>): Promise<any>; | |
/** | |
* Navigate to a URL. Returns a promise that resolves when navigation is complete. | |
* | |
* | |
* | |
* If the given URL begins with a `/`, router will navigate absolutely. | |
* | |
* If the given URL does not begin with `/`, the router will navigate relative to this component. | |
*/ | |
navigate(url: string): Promise<any>; | |
/** | |
* Subscribe to URL updates from the router | |
*/ | |
subscribe(onNext: any): void; | |
/** | |
* Updates this router and all descendant routers according to the given instruction | |
*/ | |
commit(instruction: Instruction): Promise<any>; | |
/** | |
* Removes the contents of this router's outlet and all descendant outlets | |
*/ | |
deactivate(): Promise<any>; | |
/** | |
* Given a URL, returns an instruction representing the component graph | |
*/ | |
recognize(url: string): Promise<Instruction>; | |
/** | |
* Navigates to either the last URL successfully navigated to, or the last URL requested if the | |
* | |
* router has yet to successfully navigate. | |
*/ | |
renavigate(): Promise<any>; | |
/** | |
* Generate a URL from a component name and optional map of parameters. The URL is relative to the | |
* | |
* app's base href. | |
*/ | |
generate(linkParams: List<any>): string; | |
} | |
class RootRouter extends Router { | |
commit(instruction: any): Promise<any>; | |
} | |
/** | |
* A router outlet is a placeholder that Angular dynamically fills based on the application's route. | |
* | |
* | |
* | |
* ## Use | |
* | |
* | |
* | |
* ``` | |
* | |
* <router-outlet></router-outlet> | |
* | |
* ``` | |
*/ | |
class RouterOutlet { | |
/** | |
* Given an instruction, update the contents of this outlet. | |
*/ | |
activate(instruction: Instruction): Promise<any>; | |
deactivate(): Promise<any>; | |
canDeactivate(instruction: Instruction): Promise<boolean>; | |
} | |
/** | |
* The RouterLink directive lets you link to specific parts of your app. | |
* | |
* | |
* | |
* Consider the following route configuration: | |
* | |
* | |
* | |
* ``` | |
* | |
* @RouteConfig({ | |
* | |
* path: '/user', component: UserCmp, as: 'user' | |
* | |
* }); | |
* | |
* class MyComp {} | |
* | |
* ``` | |
* | |
* | |
* | |
* When linking to this `user` route, you can write: | |
* | |
* | |
* | |
* ``` | |
* | |
* <a [router-link]="['./user']">link to user component</a> | |
* | |
* ``` | |
* | |
* | |
* | |
* RouterLink expects the value to be an array of route names, followed by the params | |
* | |
* for that level of routing. For instance `['/team', {teamId: 1}, 'user', {userId: 2}]` | |
* | |
* means that we want to generate a link for the `team` route with params `{teamId: 1}`, | |
* | |
* and with a child route `user` with params `{userId: 2}`. | |
* | |
* | |
* | |
* The first route name should be prepended with `/`, `./`, or `../`. | |
* | |
* If the route begins with `/`, the router will look up the route from the root of the app. | |
* | |
* If the route begins with `./`, the router will instead look in the current component's | |
* | |
* children for the route. And if the route begins with `../`, the router will look at the | |
* | |
* current component's parent. | |
* | |
* | |
* | |
* @exportedAs angular2/router | |
*/ | |
class RouterLink { | |
visibleHref: string; | |
routeParams: void; | |
onClick(): boolean; | |
} | |
class RouteParams { | |
params: StringMap<string, string>; | |
get(param: string): string; | |
} | |
/** | |
* The RouteRegistry holds route configurations for each component in an Angular app. | |
* | |
* It is responsible for creating Instructions from URLs, and generating URLs based on route and | |
* | |
* parameters. | |
*/ | |
class RouteRegistry { | |
/** | |
* Given a component and a configuration object, add the route to this registry | |
*/ | |
config(parentComponent: any, config: StringMap<string, any>): void; | |
/** | |
* Reads the annotations of a component and configures the registry based on them | |
*/ | |
configFromComponent(component: any): void; | |
/** | |
* Given a URL and a parent component, return the most specific instruction for navigating | |
* | |
* the application into the state specified by the url | |
*/ | |
recognize(url: string, parentComponent: any): Promise<Instruction>; | |
/** | |
* Given a normalized list with component names and params like: `['user', {id: 3 }]` | |
* | |
* generates a url with a leading slash relative to the provided `parentComponent`. | |
*/ | |
generate(linkParams: List<any>, parentComponent: any): string; | |
} | |
class LocationStrategy { | |
path(): string; | |
pushState(ctx: any, title: string, url: string): void; | |
forward(): void; | |
back(): void; | |
onPopState(fn: any): void; | |
getBaseHref(): string; | |
} | |
class HashLocationStrategy extends LocationStrategy { | |
onPopState(fn: EventListener): void; | |
getBaseHref(): string; | |
path(): string; | |
pushState(state: any, title: string, url: string): void; | |
forward(): void; | |
back(): void; | |
} | |
class HTML5LocationStrategy extends LocationStrategy { | |
onPopState(fn: EventListener): void; | |
getBaseHref(): string; | |
path(): string; | |
pushState(state: any, title: string, url: string): void; | |
forward(): void; | |
back(): void; | |
} | |
/** | |
* This is the service that an application developer will directly interact with. | |
* | |
* | |
* | |
* Responsible for normalizing the URL against the application's base href. | |
* | |
* A normalized URL is absolute from the URL host, includes the application's base href, and has no | |
* | |
* trailing slash: | |
* | |
* - `/my/app/user/123` is normalized | |
* | |
* - `my/app/user/123` **is not** normalized | |
* | |
* - `/my/app/user/123/` **is not** normalized | |
*/ | |
class Location { | |
path(): string; | |
normalize(url: string): string; | |
normalizeAbsolutely(url: string): string; | |
go(url: string): void; | |
forward(): void; | |
back(): void; | |
subscribe(onNext: any, onThrow?: any, onReturn?: any): void; | |
} | |
var appBaseHrefToken : OpaqueToken ; | |
/** | |
* Responsible for performing each step of navigation. | |
* | |
* "Steps" are conceptually similar to "middleware" | |
*/ | |
class Pipeline { | |
steps: List<Function>; | |
process(instruction: Instruction): Promise<any>; | |
} | |
var routerDirectives : List<any> ; | |
var routerInjectables : List<any> ; | |
var RouteConfig; | |
} | |
declare module "angular2/angular2" { | |
export = ng; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment