Skip to content

Commit 06b4017

Browse files
crisbetojelbourn
authored andcommitted
fix(badge): AoT and server-side rendering errors (#9935)
* Adds the badge component to the kitchen sink checks. * Fixes an AoT error due to a reference to a private property in the `host` binding. * Fixes a server-side rendering error due to a usage of `requestAnimationFrame`.
1 parent bd7a408 commit 06b4017

File tree

3 files changed

+20
-7
lines changed

3 files changed

+20
-7
lines changed

src/lib/badge/badge.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export type MatBadgeSize = 'small' | 'medium' | 'large';
2222
selector: '[matBadge]',
2323
host: {
2424
'class': 'mat-badge',
25-
'[class.mat-badge-overlap]': '_overlap',
25+
'[class.mat-badge-overlap]': 'overlap',
2626
'[class.mat-badge-above]': 'isAbove()',
2727
'[class.mat-badge-below]': '!isAbove()',
2828
'[class.mat-badge-before]': '!isAfter()',
@@ -123,6 +123,8 @@ export class MatBadge {
123123
/** Creates the badge element */
124124
private _createBadgeElement(): HTMLElement {
125125
const badgeElement = this._document.createElement('span');
126+
const activeClass = 'mat-badge-active';
127+
126128
badgeElement.setAttribute('id', `mat-badge-content-${this._id}`);
127129
badgeElement.classList.add('mat-badge-content');
128130
badgeElement.textContent = this.content;
@@ -134,12 +136,15 @@ export class MatBadge {
134136
this._elementRef.nativeElement.appendChild(badgeElement);
135137

136138
// animate in after insertion
137-
this._ngZone.runOutsideAngular(() => requestAnimationFrame(() => {
138-
// ensure content available
139-
if (badgeElement) {
140-
badgeElement.classList.add('mat-badge-active');
141-
}
142-
}));
139+
if (typeof requestAnimationFrame === 'function') {
140+
this._ngZone.runOutsideAngular(() => {
141+
requestAnimationFrame(() => {
142+
badgeElement.classList.add(activeClass);
143+
});
144+
});
145+
} else {
146+
badgeElement.classList.add(activeClass);
147+
}
143148

144149
return badgeElement;
145150
}

src/universal-app/kitchen-sink/kitchen-sink.html

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,3 +326,9 @@ <h2>Focus trap</h2>
326326
<div cdkTrapFocus cdkTrapFocusAutoCapture>
327327
<button>Oh no, I'm trapped!</button>
328328
</div>
329+
330+
<h2>Badge</h2>
331+
332+
<button mat-raised-button matBadge="Clicked 1337 times">
333+
Clicky thing
334+
</button>

src/universal-app/kitchen-sink/kitchen-sink.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {ServerModule} from '@angular/platform-server';
33
import {BrowserModule} from '@angular/platform-browser';
44
import {
55
MatAutocompleteModule,
6+
MatBadgeModule,
67
MatButtonModule,
78
MatButtonToggleModule,
89
MatCardModule,
@@ -93,6 +94,7 @@ export class KitchenSink {
9394
imports: [
9495
BrowserModule.withServerTransition({appId: 'kitchen-sink'}),
9596
MatAutocompleteModule,
97+
MatBadgeModule,
9698
MatButtonModule,
9799
MatButtonToggleModule,
98100
MatCardModule,

0 commit comments

Comments
 (0)