docs(core): add an example of using ContentChildren
This commit is contained in:
parent
ff03d87cdd
commit
1348c65b0c
|
@ -0,0 +1,46 @@
|
||||||
|
/**
|
||||||
|
* @license
|
||||||
|
* Copyright Google Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style license that can be
|
||||||
|
* found in the LICENSE file at https://angular.io/license
|
||||||
|
*/
|
||||||
|
|
||||||
|
// #docregion Component
|
||||||
|
import {Component, ContentChildren, Directive, Input, QueryList} from '@angular/core';
|
||||||
|
|
||||||
|
@Directive({selector: 'pane'})
|
||||||
|
export class Pane {
|
||||||
|
@Input() id: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'tab',
|
||||||
|
template: `
|
||||||
|
<div>panes: {{serializedPanes}}</div>
|
||||||
|
`
|
||||||
|
})
|
||||||
|
export class Tab {
|
||||||
|
@ContentChildren(Pane) panes: QueryList<Pane>;
|
||||||
|
|
||||||
|
get serializedPanes(): string { return this.panes ? this.panes.map(p => p.id).join(', ') : ''; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'example-app',
|
||||||
|
template: `
|
||||||
|
<tab>
|
||||||
|
<pane id="1"></pane>
|
||||||
|
<pane id="2"></pane>
|
||||||
|
<pane id="3" *ngIf="shouldShow"></pane>
|
||||||
|
</tab>
|
||||||
|
|
||||||
|
<button (click)="show()">Show 3</button>
|
||||||
|
`,
|
||||||
|
})
|
||||||
|
export class ContentChildrenComp {
|
||||||
|
shouldShow = false;
|
||||||
|
|
||||||
|
show() { this.shouldShow = true; }
|
||||||
|
}
|
||||||
|
// #enddocregion
|
|
@ -0,0 +1,29 @@
|
||||||
|
/**
|
||||||
|
* @license
|
||||||
|
* Copyright Google Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style license that can be
|
||||||
|
* found in the LICENSE file at https://angular.io/license
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {verifyNoBrowserErrors} from '../../../../../_common/e2e_util';
|
||||||
|
|
||||||
|
describe('contentChildren example', () => {
|
||||||
|
afterEach(verifyNoBrowserErrors);
|
||||||
|
let button: ElementFinder;
|
||||||
|
let result: ElementFinder;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
browser.get('/core/di/ts/contentChildren/index.html');
|
||||||
|
button = element(by.css('button'));
|
||||||
|
result = element(by.css('div'));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should query content children', () => {
|
||||||
|
expect(result.getText()).toEqual('panes: 1, 2');
|
||||||
|
|
||||||
|
button.click();
|
||||||
|
|
||||||
|
expect(result.getText()).toEqual('panes: 1, 2, 3');
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,19 @@
|
||||||
|
/**
|
||||||
|
* @license
|
||||||
|
* Copyright Google Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style license that can be
|
||||||
|
* found in the LICENSE file at https://angular.io/license
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {NgModule} from '@angular/core';
|
||||||
|
import {BrowserModule} from '@angular/platform-browser';
|
||||||
|
import {ContentChildrenComp, Pane, Tab} from './content_children_example';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [BrowserModule],
|
||||||
|
declarations: [ContentChildrenComp, Pane, Tab],
|
||||||
|
bootstrap: [ContentChildrenComp]
|
||||||
|
})
|
||||||
|
export class AppModule {
|
||||||
|
}
|
Loading…
Reference in New Issue