angular - 如何以编程方式触发 Angular MatListItem 的涟漪效应?
问题描述
在 Angular 材质中,许多组件都有可爱的涟漪效应。当您单击 mat-list-item 时,会发生涟漪效应。
现在使用按钮和许多其他组件,您可以触发涟漪效应,button.ripple.launch(...)
但使用 mat-list-item 我看不到这样的功能。我希望能够通知用户对列表所做的更改。
有谁知道解决方法?我尝试从 MatListItem 的 _getHostElement() 调度“点击”,但无济于事。
编辑
感谢所有帮助过的人!我想最后我会设计我自己的列表组件,让我可以访问它的 MatRipple 指令。我已经分叉了 pr41 的 stackblitz 以使情况类似于我所拥有的情况(使用 *ngFor 生成的列表),如果有人知道该放什么:
this.listChildren.map((item: MatListItem) => {
// item is the MatListItem. How do I access its ripple directive?
});
那很好啊!
分叉:https ://stackblitz.com/edit/angular-mmjda4-ssoajs?file=app%2Flist-overview-example.ts
解决方案
在最新版本的 Material 中,现在有一个 Ripples 模块(此处的文档),它允许自定义和编程触发组件中的涟漪,例如mat-list-item
.
程序化触发涉及以下内容:首先,我们制作列表并附加matRipple
指令。在我的示例中,我使用按钮单击来触发波纹,因此还添加了一个事件处理程序:
<mat-list role="list" matRipple>
<mat-list-item role="listitem">Item 1</mat-list-item>
<mat-list-item role="listitem">Item 2</mat-list-item>
<mat-list-item role="listitem">Item 3</mat-list-item>
</mat-list>
<button mat-raised-button color="accent" (click)="triggerRipple()">Trigger Ripple</button>
在组件中,我们抓取matRipple
using ViewChild
,允许我们调用launch()
波纹来触发实际的波纹效果:
@ViewChild(MatRipple) ripple: MatRipple;
triggerRipple() {
this.ripple.launch({centered: true});
}
这是一个堆栈闪电战,展示了这个示例的实际效果;单击该按钮可在mat-list
. matRipple
当然,如果您希望将涟漪效应应用于其他内容,您可以将指令移动到任何组件。查看文档以获取更多可用的配置选项。
推荐阅读
- reactjs - 具有 2 种不同 UI 结构的 Next.js 多语言应用程序
- flutter - 如何在 Flutter 中制作这个我是 Flutter 的新手,所以如果有人知道
- firebase - 使用 gofiber firebase-auth 时获取“丢失或格式错误的令牌”
- c++ - C++,C++ 的 OpenCv 给出了错误,尽管它是正确构建的
- android - 如何检查与查尔斯的连接方法请求?
- ajax - JSF ajax - 重置延迟
- php - 如何检查是否启用了 JIT?
- flutter - 如何加密/解密列表
飘飘然 - logic - 条件评估时的 Github 操作
- ios - IOS 14 Admob 广告实施 App Tracking Transparency