Skip to content

Commit ad3b356

Browse files
feat(ResolveData): Add ResolveData decorator for mapping resolved data to component properties
1 parent b4d1f49 commit ad3b356

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

src/decorators/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "./resolveData";

src/decorators/resolveData.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/** @module decorators */
2+
/** */
3+
4+
/**
5+
* An ES7 decorator which maps resolve data to a component.
6+
*
7+
* Add this decorator to a property of your component.
8+
* The decorator marks the component's property to receive resolve data.
9+
*
10+
* When resolve data of the same name (token) is found,
11+
* the resolve data will be assigned to the component's property.
12+
*
13+
* #### Example:
14+
*
15+
* The component's properties receive resolve data from the state definition.
16+
* ```js
17+
* @Component({ selector: 'foo' })
18+
* export class FooComponent {
19+
* @Resolve() resolveToken1;
20+
* @Resolve('resolveToken2') prop2;
21+
* @Input() @Resolve() resolveToken3;
22+
* }
23+
*
24+
* const fooState = {
25+
* name: 'foo',
26+
* component: FooComponent,
27+
* resolve: [
28+
* { token: 'resolveToken1', deps: [], resolveFn: resolve1Fn },
29+
* { token: 'resolveToken2', deps: [], resolveFn: resolve2Fn },
30+
* { token: 'resolveToken3', deps: [], resolveFn: resolve3Fn },
31+
* ]
32+
* }
33+
* ```
34+
*
35+
* @param token The resolve token to bind to this property
36+
* (if omitted, the property name is used as the token)
37+
*/
38+
export function ResolveData(token?: string): PropertyDecorator {
39+
return function(target, property: string) {
40+
const inputs = target['__inputs'] = target['__inputs'] || {};
41+
token = token || property;
42+
inputs[token] = property;
43+
};
44+
}

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/** @ng2api @module ng2 */ /** for typedoc */
22
export * from "ui-router-core";
33
export * from "./interface";
4+
export * from "./decorators/index";
45
export * from "./providers";
56
export * from "./uiRouterNgModule";
67
export * from "./uiRouterConfig";

0 commit comments

Comments
 (0)