feat(pipe): added the Pipe decorator and the pipe property to View
BREAKING CHANGE: Instead of configuring pipes via a Pipes object, now you can configure them by providing the pipes property to the View decorator. @Pipe({ name: 'double' }) class DoublePipe { transform(value, args) { return value * 2; } } @View({ template: '{{ 10 | double}}' pipes: [DoublePipe] }) class CustomComponent {} Closes #3572
This commit is contained in:
15
modules/angular2/src/core/pipes/pipe_binding.ts
Normal file
15
modules/angular2/src/core/pipes/pipe_binding.ts
Normal file
@ -0,0 +1,15 @@
|
||||
import {Type} from 'angular2/src/facade/lang';
|
||||
import {Key, Dependency, ResolvedBinding, Binding} from 'angular2/di';
|
||||
import {Pipe} from 'angular2/src/core/annotations_impl/annotations';
|
||||
|
||||
export class PipeBinding extends ResolvedBinding {
|
||||
constructor(public name: string, key: Key, factory: Function, dependencies: Dependency[]) {
|
||||
super(key, factory, dependencies);
|
||||
}
|
||||
|
||||
static createFromType(type: Type, metadata: Pipe): PipeBinding {
|
||||
var binding = new Binding(type, {toClass: type});
|
||||
var rb = binding.resolve();
|
||||
return new PipeBinding(metadata.name, rb.key, rb.factory, rb.dependencies);
|
||||
}
|
||||
}
|
28
modules/angular2/src/core/pipes/pipes.ts
Normal file
28
modules/angular2/src/core/pipes/pipes.ts
Normal file
@ -0,0 +1,28 @@
|
||||
import {isBlank, isPresent, BaseException, CONST, Type} from 'angular2/src/facade/lang';
|
||||
import {Injectable, OptionalMetadata, SkipSelfMetadata, Binding, Injector, bind} from 'angular2/di';
|
||||
import {PipeBinding} from './pipe_binding';
|
||||
import * as cd from 'angular2/src/change_detection/pipes';
|
||||
|
||||
export class ProtoPipes {
|
||||
/**
|
||||
* Map of {@link Pipe} names to {@link Pipe} implementations.
|
||||
*/
|
||||
config: StringMap<string, PipeBinding> = {};
|
||||
|
||||
constructor(bindings: PipeBinding[]) { bindings.forEach(b => this.config[b.name] = b); }
|
||||
|
||||
get(name: string): PipeBinding {
|
||||
var binding = this.config[name];
|
||||
if (isBlank(binding)) throw new BaseException(`Cannot find pipe '${name}'.`);
|
||||
return binding;
|
||||
}
|
||||
}
|
||||
|
||||
export class Pipes implements cd.Pipes {
|
||||
constructor(public proto: ProtoPipes, public injector: Injector) {}
|
||||
|
||||
get(name: string): any {
|
||||
var b = this.proto.get(name);
|
||||
return this.injector.instantiateResolved(b);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user