@@ -5,6 +5,9 @@ title: 'Render strategies'
5
5
hide_title : true
6
6
---
7
7
8
+ import Tabs from ' @theme/Tabs' ;
9
+ import TabItem from ' @theme/TabItem' ;
10
+
8
11
# @rx-angular/cdk /render-strategies
9
12
10
13
[ ![ npm] ( https://img.shields.io/npm/v/%40rx-angular%2Fcdk.svg )] ( https://www.npmjs.com/package/%40rx-angular%2Fcdk )
@@ -41,9 +44,9 @@ yarn add @rx-angular/cdk
41
44
## Documentation
42
45
43
46
- [ Render Strategies] ( https://rx-angular.io/docs/cdk/render-strategies )
44
- - [ Strategies] ( https://rx-angular.io/docs/cdk/render-strategies/strategies )
45
- - [ Basic Strategies] ( https://rx-angular.io/docs/cdk/render-strategies/strategies/basic-strategies )
46
- - [ Concurrent-strategies] ( https://rx-angular.io/docs/cdk/render-strategies/strategies/concurrent-strategies )
47
+ - [ Strategies] ( https://rx-angular.io/docs/cdk/render-strategies/strategies )
48
+ - [ Basic Strategies] ( https://rx-angular.io/docs/cdk/render-strategies/strategies/basic-strategies )
49
+ - [ Concurrent-strategies] ( https://rx-angular.io/docs/cdk/render-strategies/strategies/concurrent-strategies )
47
50
48
51
## Render strategies
49
52
@@ -172,81 +175,79 @@ By default the following configurations are set:
172
175
- primaryStrategy: ` normal `
173
176
- patchZone: ` true `
174
177
175
- ### Global
176
-
177
- 1 . Module Import
178
+ <Tabs >
179
+ <TabItem value = " appConfig" label = " Configure in appConfig" >
178
180
179
181
``` typescript
180
- ...
181
- import {RxRenderStrategiesConfig , RX_RENDER_STRATEGIES_CONFIG } from ' @rx-angular/cdk/render-strategies' ;
182
-
183
- const CUSTOM_RX_ANGULAR_CONFIG: RxRenderStrategiesConfig <string > = {
184
- primaryStrategy: ' global' ,
185
- patchZone: false
186
- }
182
+ import { provideRxRenderStrategies } from ' @rx-angular/cdk/render-strategies' ;
187
183
188
- @ Module ( {
184
+ const appConfig : ApplicationConfig = {
189
185
providers: [
190
- {
191
- provide: RX_RENDER_STRATEGIES_CONFIG ,
192
- useValue: CUSTOM_RX_ANGULAR_CONFIG
193
- }
194
- ]
195
- })
196
- export class AnyModule {
197
-
198
- }
186
+ // ... other providers
187
+ provideRxRenderStrategies ({
188
+ primaryStrategy: ' userBlocking' ,
189
+ patchZone: false ,
190
+ }),
191
+ ],
192
+ };
199
193
```
200
194
201
- ### Feature Module
195
+ </TabItem >
196
+ <TabItem value = " ngModule" label = " Configure in NgModules" >
202
197
203
- ``` typescript
204
- ...
205
- import {RxRenderStrategiesConfig , RX_RENDER_STRATEGIES_CONFIG } from ' @rx-angular/cdk/render-strategies' ;
198
+ This can be done in any NgModule, AppModule or any feature module.
206
199
207
- const FEATURE_RX_ANGULAR_CONFIG: RxRenderStrategiesConfig <string > = {
208
- primaryStrategy: ' global' ,
209
- patchZone: false
210
- }
200
+ ``` typescript
201
+ import { provideRxRenderStrategies } from ' @rx-angular/cdk/render-strategies' ;
211
202
212
- @Module ({
203
+ @NgModule ({
213
204
providers: [
214
- {
215
- provide: RX_RENDER_STRATEGIES_CONFIG ,
216
- useValue: FEATURE_RX_ANGULAR_CONFIG
217
- }
218
- ]
205
+ provideRxRenderStrategies ( {
206
+ primaryStrategy: ' global ' ,
207
+ patchZone: false ,
208
+ }),
209
+ ],
219
210
})
220
- export class AnyFeatureModule {
221
-
222
- }
211
+ export class AnyModule {}
223
212
```
224
213
225
- ### Component
214
+ </TabItem >
215
+
216
+ <TabItem value = " route" label = " Configure at route level" >
226
217
227
218
``` typescript
228
- ...
229
- import {RxRenderStrategiesConfig , RX_RENDER_STRATEGIES_CONFIG } from ' @rx-angular/cdk/render-strategies' ;
219
+ import { provideRxRenderStrategies } from ' @rx-angular/cdk/render-strategies' ;
220
+
221
+ export const routes: Routes = [
222
+ {
223
+ path: ' any-route' ,
224
+ component: AnyComponent ,
225
+ providers: [provideRxRenderStrategies ({ primaryStrategy: ' userBlocking' })],
226
+ children: [
227
+ // ... any child routes
228
+ ],
229
+ },
230
+ ];
231
+ ```
230
232
231
- const COMPONENT_RX_ANGULAR_CONFIG: RxRenderStrategiesConfig <string > = {
232
- primaryStrategy: ' global' ,
233
- patchZone: false
234
- }
233
+ </TabItem >
234
+
235
+ <TabItem value = " component" label = " Configure at component level" >
236
+
237
+ ``` typescript
238
+ import { provideRxRenderStrategies } from ' @rx-angular/cdk/render-strategies' ;
235
239
236
240
@Component ({
237
241
selector: ' any-component' ,
238
- providers: [
239
- {
240
- provide: RX_RENDER_STRATEGIES_CONFIG ,
241
- useValue: COMPONENT_RX_ANGULAR_CONFIG
242
- }
243
- ]
242
+ providers: [provideRxRenderStrategies ({ primaryStrategy: ' userBlocking' , patchZone: false })],
244
243
})
245
- export class AnyComponent {
246
-
247
- }
244
+ export class AnyComponent {}
248
245
```
249
246
247
+ </TabItem >
248
+
249
+ </Tabs >
250
+
250
251
## Usage
251
252
252
253
Render strategies can be used with the ` StrategyProvider ` or ` Directive ` like ` push ` , ` rxLet ` or ` rxFor ` .
@@ -273,18 +274,18 @@ In this case, we span an overlay with the `immediate` strategy to get the best U
273
274
The reason for the strategy choice is primarily because user interaction needs to give feedback instantly to align with the user's expectations.
274
275
275
276
``` typescript
277
+ import { RxStrategyProvider } from ' @rx-angular/cdk/render-strategies' ;
278
+
276
279
@Component ({
277
280
selector: ' any-component' ,
278
281
template: ` ... ` ,
279
282
})
280
283
export class AnyComponent {
281
- constructor (
282
- public strategyProvider : RxStrategyProvider ,
283
- public changeDetectorRef : ChangeDetectorRef
284
- ) {}
284
+ private strategyProvider = inject (RxStrategyProvider );
285
+ private cdr = inject (ChangeDetectorRef );
285
286
286
287
openDialog() {
287
- this .strategyProvider .scheduleCD (this .changeDetectorRef , {
288
+ this .strategyProvider .scheduleCD (this .cdr , {
288
289
strategy: ' immediate' ,
289
290
});
290
291
}
@@ -334,26 +335,18 @@ In this case, we can use a low priority.
334
335
Again, ` RxStrategyProvider ` needs to get imported, and the scheduling APIs needs to be used.
335
336
336
337
``` typescript
337
- @ Injectable ({
338
- providedIn: ' root ' ,
339
- })
338
+ import { RxStrategyProvider } from ' @rx-angular/cdk/render-strategies ' ;
339
+
340
+ @ Injectable ({ providedIn: ' root ' })
340
341
export class AnyService {
341
- constructor (
342
- public strategyProvider : RxStrategyProvider ,
343
- private apiService : ApiService
344
- ) {}
342
+ private strategyProvider = inject (RxStrategyProvider );
343
+ private apiService = inject (ApiService );
345
344
346
345
getData() {
347
- this .strategyProvider
348
- .schedule (() => this .apiService .sendRequest (), { strategy: ' low' })
349
- .subscribe ();
346
+ this .strategyProvider .schedule (() => this .apiService .sendRequest (), { strategy: ' low' }).subscribe ();
350
347
}
351
348
}
352
349
```
353
350
354
351
> ** ⚠ Notice:**
355
352
> The component that introduces the change does not know where in the template it sits. The whole template needs to be re-evaluated.
356
-
357
- ## Testing
358
-
359
- @TODO
0 commit comments