parent
6b627f67db
commit
49082d7ab2
@ -42,6 +42,7 @@ export function defineComponent<T>(componentDefinition: ComponentDefArgs<T>): Co
|
|||||||
tag: (componentDefinition as ComponentDefArgs<T>).tag || null !,
|
tag: (componentDefinition as ComponentDefArgs<T>).tag || null !,
|
||||||
template: (componentDefinition as ComponentDefArgs<T>).template || null !,
|
template: (componentDefinition as ComponentDefArgs<T>).template || null !,
|
||||||
h: componentDefinition.hostBindings || noop,
|
h: componentDefinition.hostBindings || noop,
|
||||||
|
attributes: componentDefinition.attributes || null,
|
||||||
inputs: invertObject(componentDefinition.inputs),
|
inputs: invertObject(componentDefinition.inputs),
|
||||||
outputs: invertObject(componentDefinition.outputs),
|
outputs: invertObject(componentDefinition.outputs),
|
||||||
methods: invertObject(componentDefinition.methods),
|
methods: invertObject(componentDefinition.methods),
|
||||||
@ -177,4 +178,4 @@ export function definePipe<T>(
|
|||||||
{type, factory, pure}: {type: Type<T>, factory: () => PipeTransform, pure?: boolean}):
|
{type, factory, pure}: {type: Type<T>, factory: () => PipeTransform, pure?: boolean}):
|
||||||
PipeDef<T> {
|
PipeDef<T> {
|
||||||
throw new Error('TODO: implement!');
|
throw new Error('TODO: implement!');
|
||||||
}
|
}
|
||||||
|
@ -910,6 +910,12 @@ export function directiveCreate<T>(
|
|||||||
diPublic(directiveDef !);
|
diPublic(directiveDef !);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (directiveDef !.attributes != null &&
|
||||||
|
(previousOrParentNode.flags & LNodeFlags.TYPE_MASK) == LNodeFlags.Element) {
|
||||||
|
setUpAttributes(
|
||||||
|
(previousOrParentNode as LElementNode).native, directiveDef !.attributes as string[]);
|
||||||
|
}
|
||||||
|
|
||||||
const tNode: TNode|null = previousOrParentNode.tNode !;
|
const tNode: TNode|null = previousOrParentNode.tNode !;
|
||||||
if (tNode && tNode.attrs) {
|
if (tNode && tNode.attrs) {
|
||||||
setInputsFromAttrs<T>(instance, directiveDef !.inputs, tNode);
|
setInputsFromAttrs<T>(instance, directiveDef !.inputs, tNode);
|
||||||
|
@ -79,6 +79,14 @@ export interface DirectiveDef<T> {
|
|||||||
*/
|
*/
|
||||||
h(directiveIndex: number, elementIndex: number): void;
|
h(directiveIndex: number, elementIndex: number): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Static attributes to set on host element.
|
||||||
|
*
|
||||||
|
* Even indices: attribute name
|
||||||
|
* Odd indices: attribute value
|
||||||
|
*/
|
||||||
|
attributes: string[]|null;
|
||||||
|
|
||||||
/* The following are lifecycle hooks for this component */
|
/* The following are lifecycle hooks for this component */
|
||||||
onInit: (() => void)|null;
|
onInit: (() => void)|null;
|
||||||
doCheck: (() => void)|null;
|
doCheck: (() => void)|null;
|
||||||
@ -140,6 +148,7 @@ export interface PipeDef<T> {
|
|||||||
export interface DirectiveDefArgs<T> {
|
export interface DirectiveDefArgs<T> {
|
||||||
type: Type<T>;
|
type: Type<T>;
|
||||||
factory: () => T | [T];
|
factory: () => T | [T];
|
||||||
|
attributes?: string[];
|
||||||
inputs?: {[P in keyof T]?: string};
|
inputs?: {[P in keyof T]?: string};
|
||||||
outputs?: {[P in keyof T]?: string};
|
outputs?: {[P in keyof T]?: string};
|
||||||
methods?: {[P in keyof T]?: string};
|
methods?: {[P in keyof T]?: string};
|
||||||
|
@ -225,6 +225,49 @@ describe('compiler specification', () => {
|
|||||||
expect(renderComp(MyApp)).toEqual(`<button hostlistenerdir="">Click</button>`);
|
expect(renderComp(MyApp)).toEqual(`<button hostlistenerdir="">Click</button>`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
it('should support setting of host attributes', () => {
|
||||||
|
type $MyApp$ = MyApp;
|
||||||
|
|
||||||
|
@Directive({selector: '[hostAttributeDir]', host: {'role': 'listbox'}})
|
||||||
|
class HostAttributeDir {
|
||||||
|
// NORMATIVE
|
||||||
|
static ngDirectiveDef = $r3$.ɵdefineDirective({
|
||||||
|
type: HostAttributeDir,
|
||||||
|
factory: function HostAttributeDir_Factory() { return new HostAttributeDir(); },
|
||||||
|
attributes: ['role', 'listbox']
|
||||||
|
});
|
||||||
|
// /NORMATIVE
|
||||||
|
}
|
||||||
|
|
||||||
|
const $e0_attrs$ = ['hostAttributeDir', ''];
|
||||||
|
const $e0_dirs$ = [HostAttributeDir];
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'my-app',
|
||||||
|
template: `
|
||||||
|
<div hostAttributeDir></div>
|
||||||
|
`
|
||||||
|
})
|
||||||
|
class MyApp {
|
||||||
|
static ngComponentDef = $r3$.ɵdefineComponent({
|
||||||
|
type: MyApp,
|
||||||
|
tag: 'my-app',
|
||||||
|
factory: function MyApp_Factory() { return new MyApp(); },
|
||||||
|
template: function MyApp_Template(ctx: $MyApp$, cm: $boolean$) {
|
||||||
|
if (cm) {
|
||||||
|
$r3$.ɵE(0, 'div', $e0_attrs$, $e0_dirs$);
|
||||||
|
$r3$.ɵe();
|
||||||
|
}
|
||||||
|
HostAttributeDir.ngDirectiveDef.h(1, 0);
|
||||||
|
$r3$.ɵr(1, 0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(renderComp(MyApp)).toEqual(`<div hostattributedir="" role="listbox"></div>`);
|
||||||
|
});
|
||||||
|
|
||||||
it('should support bindings of host attributes', () => {
|
it('should support bindings of host attributes', () => {
|
||||||
type $MyApp$ = MyApp;
|
type $MyApp$ = MyApp;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user