|
1 | 1 | <span class="hljs-keyword">import</span> {MediaMatcher} <span class="hljs-keyword">from</span> <span class="hljs-string">'@angular/cdk/layout'</span>; |
2 | | -<span class="hljs-keyword">import</span> {ChangeDetectorRef, Component, OnDestroy, inject} <span class="hljs-keyword">from</span> <span class="hljs-string">'@angular/core'</span>; |
| 2 | +<span class="hljs-keyword">import</span> {Component, OnDestroy, inject, signal} <span class="hljs-keyword">from</span> <span class="hljs-string">'@angular/core'</span>; |
3 | 3 | <span class="hljs-keyword">import</span> {MatListModule} <span class="hljs-keyword">from</span> <span class="hljs-string">'@angular/material/list'</span>; |
4 | 4 | <span class="hljs-keyword">import</span> {MatSidenavModule} <span class="hljs-keyword">from</span> <span class="hljs-string">'@angular/material/sidenav'</span>; |
5 | 5 | <span class="hljs-keyword">import</span> {MatIconModule} <span class="hljs-keyword">from</span> <span class="hljs-string">'@angular/material/icon'</span>; |
6 | 6 | <span class="hljs-keyword">import</span> {MatButtonModule} <span class="hljs-keyword">from</span> <span class="hljs-string">'@angular/material/button'</span>; |
7 | 7 | <span class="hljs-keyword">import</span> {MatToolbarModule} <span class="hljs-keyword">from</span> <span class="hljs-string">'@angular/material/toolbar'</span>; |
| 8 | +<span class="hljs-keyword">import</span> {RouterLink} <span class="hljs-keyword">from</span> <span class="hljs-string">'@angular/router'</span>; |
8 | 9 |
|
9 | 10 | <span class="hljs-comment">/** <span class="hljs-doctag">@title </span>Responsive sidenav */</span> |
10 | 11 | <span class="hljs-meta">@Component</span>({ |
11 | 12 | <span class="hljs-attr">selector</span>: <span class="hljs-string">'sidenav-responsive-example'</span>, |
12 | 13 | <span class="hljs-attr">templateUrl</span>: <span class="hljs-string">'sidenav-responsive-example.html'</span>, |
13 | 14 | <span class="hljs-attr">styleUrl</span>: <span class="hljs-string">'sidenav-responsive-example.css'</span>, |
14 | | - <span class="hljs-attr">imports</span>: [MatToolbarModule, MatButtonModule, MatIconModule, MatSidenavModule, MatListModule], |
| 15 | + <span class="hljs-attr">imports</span>: [ |
| 16 | + MatToolbarModule, |
| 17 | + MatButtonModule, |
| 18 | + MatIconModule, |
| 19 | + MatSidenavModule, |
| 20 | + MatListModule, |
| 21 | + RouterLink, |
| 22 | + ], |
15 | 23 | }) |
16 | 24 | <span class="hljs-keyword">export</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SidenavResponsiveExample</span> <span class="hljs-title">implements</span> <span class="hljs-title">OnDestroy</span> </span>{ |
17 | | - <span class="hljs-attr">mobileQuery</span>: MediaQueryList; |
| 25 | + <span class="hljs-keyword">protected</span> <span class="hljs-keyword">readonly</span> fillerNav = <span class="hljs-built_in">Array</span>.from({<span class="hljs-attr">length</span>: <span class="hljs-number">50</span>}, <span class="hljs-function">(<span class="hljs-params">_, i</span>) =></span> <span class="hljs-string">`Nav Item <span class="hljs-subst">${i + <span class="hljs-number">1</span>}</span>`</span>); |
18 | 26 |
|
19 | | - fillerNav = <span class="hljs-built_in">Array</span>.from({<span class="hljs-attr">length</span>: <span class="hljs-number">50</span>}, <span class="hljs-function">(<span class="hljs-params">_, i</span>) =></span> <span class="hljs-string">`Nav Item <span class="hljs-subst">${i + <span class="hljs-number">1</span>}</span>`</span>); |
20 | | - |
21 | | - fillerContent = <span class="hljs-built_in">Array</span>.from( |
| 27 | + <span class="hljs-keyword">protected</span> <span class="hljs-keyword">readonly</span> fillerContent = <span class="hljs-built_in">Array</span>.from( |
22 | 28 | {<span class="hljs-attr">length</span>: <span class="hljs-number">50</span>}, |
23 | 29 | <span class="hljs-function">() =></span> |
24 | 30 | <span class="hljs-string">`Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut |
|
28 | 34 | cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.`</span>, |
29 | 35 | ); |
30 | 36 |
|
31 | | - <span class="hljs-keyword">private</span> _mobileQueryListener: <span class="hljs-function">() =></span> <span class="hljs-built_in">void</span>; |
| 37 | + <span class="hljs-keyword">protected</span> <span class="hljs-keyword">readonly</span> isMobile = signal(<span class="hljs-literal">true</span>); |
| 38 | + |
| 39 | + <span class="hljs-keyword">private</span> <span class="hljs-keyword">readonly</span> _mobileQuery: MediaQueryList; |
| 40 | + <span class="hljs-keyword">private</span> <span class="hljs-keyword">readonly</span> _mobileQueryListener: <span class="hljs-function">() =></span> <span class="hljs-built_in">void</span>; |
32 | 41 |
|
33 | 42 | <span class="hljs-function"><span class="hljs-title">constructor</span>(<span class="hljs-params"></span>)</span> { |
34 | | - <span class="hljs-keyword">const</span> changeDetectorRef = inject(ChangeDetectorRef); |
35 | 43 | <span class="hljs-keyword">const</span> media = inject(MediaMatcher); |
36 | 44 |
|
37 | | - <span class="hljs-built_in">this</span>.mobileQuery = media.matchMedia(<span class="hljs-string">'(max-width: 600px)'</span>); |
38 | | - <span class="hljs-built_in">this</span>._mobileQueryListener = <span class="hljs-function">() =></span> changeDetectorRef.detectChanges(); |
39 | | - <span class="hljs-built_in">this</span>.mobileQuery.addListener(<span class="hljs-built_in">this</span>._mobileQueryListener); |
| 45 | + <span class="hljs-built_in">this</span>._mobileQuery = media.matchMedia(<span class="hljs-string">'(max-width: 600px)'</span>); |
| 46 | + <span class="hljs-built_in">this</span>.isMobile.set(<span class="hljs-built_in">this</span>._mobileQuery.matches); |
| 47 | + <span class="hljs-built_in">this</span>._mobileQueryListener = <span class="hljs-function">() =></span> <span class="hljs-built_in">this</span>.isMobile.set(<span class="hljs-built_in">this</span>._mobileQuery.matches); |
| 48 | + <span class="hljs-built_in">this</span>._mobileQuery.addEventListener(<span class="hljs-string">'change'</span>, <span class="hljs-built_in">this</span>._mobileQueryListener); |
40 | 49 | } |
41 | 50 |
|
42 | 51 | ngOnDestroy(): <span class="hljs-built_in">void</span> { |
43 | | - <span class="hljs-built_in">this</span>.mobileQuery.removeListener(<span class="hljs-built_in">this</span>._mobileQueryListener); |
| 52 | + <span class="hljs-built_in">this</span>._mobileQuery.removeEventListener(<span class="hljs-string">'change'</span>, <span class="hljs-built_in">this</span>._mobileQueryListener); |
44 | 53 | } |
45 | 54 |
|
46 | | - shouldRun = <span class="hljs-regexp">/(^|.)(stackblitz|webcontainer).(io|com)$/</span>.test(<span class="hljs-built_in">window</span>.location.host); |
| 55 | + <span class="hljs-keyword">protected</span> <span class="hljs-keyword">readonly</span> shouldRun = <span class="hljs-regexp">/(^|.)(stackblitz|webcontainer).(io|com)$/</span>.test( |
| 56 | + <span class="hljs-built_in">window</span>.location.host, |
| 57 | + ); |
47 | 58 | } |
0 commit comments