93 lines
2.1 KiB
JavaScript
93 lines
2.1 KiB
JavaScript
(function(app) {
|
|
|
|
app.heroQueries = app.heroQueries || {};
|
|
|
|
app.heroQueries.ContentChildComponent = ng.core.Component({
|
|
selector: 'content-child',
|
|
template:
|
|
'<span class="content-child" *ngIf="active">' +
|
|
'Active' +
|
|
'</span>'
|
|
}).Class({
|
|
constructor: function ContentChildComponent() {
|
|
this.active = false;
|
|
},
|
|
|
|
activate: function() {
|
|
this.active = !this.active;
|
|
}
|
|
});
|
|
|
|
////////////////////
|
|
|
|
// #docregion content
|
|
app.heroQueries.ViewChildComponent = ng.core.Component({
|
|
selector: 'view-child',
|
|
template:
|
|
'<h2 [class.active]=active>' +
|
|
'{{hero.name}} ' +
|
|
'<ng-content></ng-content>' +
|
|
'</h2>',
|
|
styles: ['.active {font-weight: bold; background-color: skyblue;}'],
|
|
inputs: ['hero'],
|
|
queries: {
|
|
content: new ng.core.ContentChild(app.heroQueries.ContentChildComponent)
|
|
}
|
|
})
|
|
.Class({
|
|
constructor: function HeroQueriesHeroComponent() {
|
|
this.active = false;
|
|
},
|
|
|
|
activate: function() {
|
|
this.active = !this.active;
|
|
this.content.activate();
|
|
}
|
|
});
|
|
// #enddocregion content
|
|
|
|
////////////////////
|
|
|
|
// #docregion view
|
|
app.heroQueries.HeroQueriesComponent = ng.core.Component({
|
|
selector: 'hero-queries',
|
|
template:
|
|
'<view-child *ngFor="let hero of heroData" [hero]="hero">' +
|
|
'<content-child></content-child>' +
|
|
'</view-child>' +
|
|
'<button (click)="activate()">{{buttonLabel}} All</button>',
|
|
queries: {
|
|
views: new ng.core.ViewChildren(app.heroQueries.ViewChildComponent)
|
|
}
|
|
})
|
|
.Class({
|
|
constructor: function HeroQueriesComponent() {
|
|
this.active = false;
|
|
this.heroData = [
|
|
{id: 1, name: 'Windstorm'},
|
|
{id: 2, name: 'LaughingGas'}
|
|
];
|
|
},
|
|
|
|
activate: function() {
|
|
this.active = !this.active;
|
|
this.views.forEach(function(view) {
|
|
view.activate();
|
|
});
|
|
},
|
|
});
|
|
|
|
// #docregion defined-property
|
|
// add prototype property w/ getter outside the DSL
|
|
var proto = app.heroQueries.HeroQueriesComponent.prototype;
|
|
Object.defineProperty(proto, "buttonLabel", {
|
|
get: function () {
|
|
return this.active ? 'Deactivate' : 'Activate';
|
|
},
|
|
enumerable: true
|
|
});
|
|
// #enddocregion defined-property
|
|
// #enddocregion view
|
|
|
|
})(window.app = window.app || {});
|