angular - 如何使用 MAT_DIALOG_SCROLL_STRATEGY 设置滚动策略
问题描述
我想为项目中的所有对话框设置滚动策略。我测试了一个对话框的行为
@Component({
selector: 'app-main',
templateUrl: './main.component.html',
styleUrls: ['./main.component.scss']
})
export class MainComponent {
constructor(public dialog: MatDialog, private overlay: Overlay) {}
showHelpDialog() {
const dialogConfig = new MatDialogConfig();
dialogConfig.scrollStrategy = this.overlay.scrollStrategies.noop();
this.dialog.open(DialogComponent, dialogConfig);
}
}
它按预期工作。在Angular Material上,我读过有关 injection token 的信息MAT_DIALOG_SCROLL_STRATEGY
。它可能应该是这样的:
@NgModule({
/* ... */
providers: [
{
provide: MAT_DIALOG_SCROLL_STRATEGY,
useValue: /* ??? */
}
]
})
export class AppModule { }
但我不知道如何设置值。滚动策略可以@angular/cdk/overlay/scroll/scroll-stratey-options.ts
在类中找到,ScrollStrategyOptions
但成员函数是非静态的,我无法实例化对象,ScrollStrategyOptions
因为我没有必要的构造函数参数。所以基本上我正在寻找一种方法来做类似的事情
@NgModule({
/* ... */
providers: [
{
provide: MAT_DIALOG_SCROLL_STRATEGY,
useValue: ScrollStrategyOptions.noop()
}
]
})
export class AppModule { }
这是一个示例项目:stackblitz
解决方案
您需要使用接受依赖项的工厂:
providers: [
{
provide: MAT_DIALOG_SCROLL_STRATEGY,
useFactory: (scrollStrategyOptions: ScrollStrategyOptions) => scrollStrategyOptions.noop,
deps: [ScrollStrategyOptions]
}
]
MAT_DIALOG_SCROLL_STRATEGY
首次请求时调用工厂。deps
您可以在属性中定义工厂期望的依赖项。
推荐阅读
- java - Main 不会调用数组
- r - 在 ggplot2 中创建(按包)绘图后,更改图例中的跟踪名称
- mongodb - MongoExport SASL 身份验证步骤:身份验证失败
- algorithm - 将给定问题优化为线性时间,而不用担心空间
- javascript - React 中的“无法读取未定义的属性‘映射’”,这里有什么问题?
- java - 使用 Apache POI 更改 Excel 折线图中的数据范围
- javascript - 将日期格式转换为另一种日期格式
- ios - 将 DJI SDK 集成到 Osmo Mobile 2 的自定义视频应用程序中
- java - Java 命名类:何时使用支持?但也考虑到 Helper 和 Utils
- r - 与 nls() 的非线性拟合在初始参数估计时给了我奇异梯度矩阵。为什么?