@@ -12,6 +12,7 @@ import {
1212 ElementRef ,
1313 QueryList ,
1414} from '@angular/core' ;
15+ import { startWith } from 'rxjs/operators' ;
1516import { MatCommonModule } from '../common-behaviors/common-module' ;
1617
1718
@@ -30,38 +31,38 @@ export class MatLine {}
3031 * Helper that takes a query list of lines and sets the correct class on the host.
3132 * @docs -private
3233 */
33- export class MatLineSetter {
34- constructor ( private _lines : QueryList < MatLine > , private _element : ElementRef < HTMLElement > ) {
35- this . _setLineClass ( this . _lines . length ) ;
36-
37- this . _lines . changes . subscribe ( ( ) => {
38- this . _setLineClass ( this . _lines . length ) ;
39- } ) ;
40- }
34+ export function setLines ( lines : QueryList < MatLine > , element : ElementRef < HTMLElement > ) {
35+ // Note: doesn't need to unsubscribe, because `changes`
36+ // gets completed by Angular when the view is destroyed.
37+ lines . changes . pipe ( startWith < QueryList < MatLine > > ( lines ) ) . subscribe ( ( { length} ) => {
38+ setClass ( element , 'mat-2-line' , false ) ;
39+ setClass ( element , 'mat-3-line' , false ) ;
40+ setClass ( element , 'mat-multi-line' , false ) ;
4141
42- private _setLineClass ( count : number ) : void {
43- this . _resetClasses ( ) ;
44- if ( count === 2 || count === 3 ) {
45- this . _setClass ( `mat-${ count } -line` , true ) ;
46- } else if ( count > 3 ) {
47- this . _setClass ( `mat-multi-line` , true ) ;
42+ if ( length === 2 || length === 3 ) {
43+ setClass ( element , `mat-${ length } -line` , true ) ;
44+ } else if ( length > 3 ) {
45+ setClass ( element , `mat-multi-line` , true ) ;
4846 }
49- }
47+ } ) ;
48+ }
5049
51- private _resetClasses ( ) : void {
52- this . _setClass ( 'mat-2-line' , false ) ;
53- this . _setClass ( 'mat-3-line' , false ) ;
54- this . _setClass ( 'mat-multi-line' , false ) ;
55- }
50+ /** Adds or removes a class from an element. */
51+ function setClass ( element : ElementRef < HTMLElement > , className : string , isAdd : boolean ) : void {
52+ const classList = element . nativeElement . classList ;
53+ isAdd ? classList . add ( className ) : classList . remove ( className ) ;
54+ }
5655
57- private _setClass ( className : string , isAdd : boolean ) : void {
58- if ( isAdd ) {
59- this . _element . nativeElement . classList . add ( className ) ;
60- } else {
61- this . _element . nativeElement . classList . remove ( className ) ;
62- }
56+ /**
57+ * Helper that takes a query list of lines and sets the correct class on the host.
58+ * @docs -private
59+ * @deprecated Use `setLines` instead.
60+ * @breaking -change 8.0.0
61+ */
62+ export class MatLineSetter {
63+ constructor ( lines : QueryList < MatLine > , element : ElementRef < HTMLElement > ) {
64+ setLines ( lines , element ) ;
6365 }
64-
6566}
6667
6768@NgModule ( {
0 commit comments