Reputation: 74
I'd like to make a custom collapse element in my aurelia application.
This is how i'm trying it now:
Collapse element:
import { children, customElement } from 'aurelia-framework';
@customElement('collapse')
export class Collapse {
@children('collapse-item') collapseItems;
constructor() {
console.log(this);
}
attached() {
console.log(this);
}
}
collapse item element:
import { noView, customElement, child } from 'aurelia-framework';
@noView
@customElement('collapse-item')
export class CollapseItem {
@child('collape-item-header') header;
@child('collape-item-body') body;
}
usage:
<collapse>
<collapse-item>
<collapse-item-header>Test Header</collapse-header>
<collapse-item-body>Test Body</collapse-body>
</collapse-item>
<collapse-item>
<collapse-item-header>Test Header 2</collapse-header>
<collapse-item-body>Test Body 2</collapse-body>
</collapse-item>
</collapse>
But its not working;
the collapseItems property in my Collapse instance is always undefined.
The next step would be to populate a bootstrap collapse using the data in the collapseItems array.
I'm obviously doing something wrong, but what?
Upvotes: 1
Views: 822
Reputation: 11990
@child
and @children
require <slot></slot>
, so you cannot use @noView
. Try this:
import { children, customElement, inlineView } from 'aurelia-framework';
@inlineView(`
<template>
<slot></slot>
</template>
`)
@customElement('collapse')
export class Collapse {
@children('collapse-item') collapseItems;
constructor() {
console.log(this);
}
attached() {
console.log(this);
}
}
-
import { inlineView, customElement, child } from 'aurelia-framework';
@inlineView(`
<template>
<slot></slot>
</template>
`)
@customElement('collapse-item')
export class CollapseItem {
@child('collape-item-header') header;
@child('collape-item-body') body;
}
Upvotes: 3