问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Angular通过DOM操作设置Material弹窗样式的替代方法

发布网友 发布时间:2024-09-17 03:37

我来回答

1个回答

热心网友 时间:2024-10-12 22:20

场景:表格页面,点击按钮后弹窗,对该行订单的规格进行修改,因为是仓库人员使用,所以需要调大输入框的字体方便使用。因为无法直接修改弹窗的样式SCSS(动态弹窗,有多个组件调用),所以打算采用获取DOM并设置font-size的方式。Ps:由于中间修改的代码没有保存,问题已经解决,所以多次尝试后删除掉的代码用省略号代替

首次尝试

我先打开弹窗,找到我需要的输入框的class,然后在ts文件中获取对应的DOM:

constructor(privateel:ElementRef,){}ngOnInit():void{this.el.nativeElement.querySelector('.mat-form-field-infix').style.fontSize='18px';}

失败了,打印出来显示获取的是null尝试多次不同的class名以及id名之后,放弃了该方法。

第二次尝试

由于弹窗是后加载,那我将获取DOM的操作放在弹窗绑定的按钮中,并设定延时是否可取呢?

asyncEditSpecs():Promise<void>{setTimeout(()=>{this.el.nativeElement.querySelector('.mat-form-field-infix').style.fontSize='18px';},1000);}

打印出来发现并没有什么改变,即使弹窗已经完整的展示在我面前,我依旧无法获取到他的DOM

第三次尝试

和一个不使用angular开发的前端同事交流了一下,一致认为由于弹窗属于后加载的组件,所以提前获取不可取,便打算采用监听的方式:

@ViewChild('DialogContent')dialogDiv:ElementRef;dialogDiv.nativeElement.style.fontSize='18px';

这次和之前不一样了,获取的是undefined……

第四次尝试

听了另一个同事的建议,Angular会不会在弹窗加载后,弹窗会读取一次SCSS文件呢?如果可行直接在网页里根据弹窗的class进行样式设置即可。

@Component({……encapsulation:ViewEncapsulation.None,})@import"src/@fuse/scss/fuse";supplier-order-warehouse{……{font-size:18px!important;}}

并没有生效,要么是弹窗本身的CSS覆盖了我设置的CSS,要么是根本没有读取

最终解决方案

我最终放弃了获取DOM的方案,转用传参的方式,新增一个style用来设置内联样式:

constdialogRef=this._matDialog.open(DialogFormComponent,{panelClass:'dialog-form',width:'300px',data:{action:'edit',……style:'font-size:18px'}});

在弹窗组件的ts文件中声明

styleConfig:string;/***@param{MatDialogRef<DialogFormComponent>}matDialogRef*@param_data//接收的数据*@param{FormBuilder}_formBuilder*@paramgeneral*@paramconfSvc*/constructor(publicmatDialogRef:MatDialogRef<DialogFormComponent>,//回传数据给弹框@Inject(MAT_DIALOG_DATA)private_data:any,//接收弹框数据private_formBuilder:FormBuilder,publicgeneral:GeneralService,publicconfSvc:ConfigService,){const{action,……,style}=_data;this.action=action;……this.styleConfig=style;}

html文件中设置:

<mat-form-fieldappearance="outline"fxFlex*ngIf="form.type!=='imgFile';elseuploadFile"……[style]="styleConfig"><mat-label>{{form.label}}</mat-label><input*ngSwitchDefault[type]="form.type?form.type:''"……>……</mat-form-field>

总算达成了想要的效果,其实途中就想过这个方式,但觉得有点笨属于下下之策,操作DOM*格多高啊(不是),折腾了半个下午最终还是采用了这个方法。

原文:https://juejin.cn/post/7099366581951528991
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
13岁一直到18岁晚上经常熬夜会有什么影响 具象表现素描内容简介 ...| 从14世纪文艺复兴到20世纪具象表现绘画 · 168幅画 · 图解西方... 【漫画赏析】比喻具象化——《孤高之人》手法分析 具象美术作品有哪些 具象艺术艺术家介绍 话说 曾经有个演唱会 是初音未来演唱会 39祭 谁知道微信聊天记录删掉了,还能恢复过来吗?有什么软件可以恢复吗?不... 六爻。测缘分。测婚姻 礼仪起源于祭祀的证据是什么? Angular周期方法和双向绑定 Angular系列教程之父子组件通信 阴跷脉和阳跷脉 弧长公式的简介 藏传佛教徒与茶 谁能帮我找下陶渊明的《陋室铭》 艾叶煮鸡蛋有暖宫的效果吗 吃几天有效果 艾叶煮鸡蛋什么时候吃最好 一个月大婴儿吃多少奶粉 藏起来by阿阮有酒 斗鱼主播弹幕助手V13绿色版斗鱼主播弹幕助手V13绿色版功能简介_百度知 ... ps快捷键ctrlaltG用法ps快捷键ctrlalti 斗鱼高能弹幕音效屏蔽 癌症晚期化疗好还是不化疗好 癌症晚期有必要化疗吗 癌症晚期需要化疗吗 什么是普通放疗、适形放疗、调强放疗、四维放疗? 放疗种类有哪些 冰糖可以天天吃吗 天天吃冰糖行吗 害离不开自己妹妹怎么办? 香椿树和臭椿树的树种区别 臭椿树经济价值 佳木斯大学专科里有高护么? 佳木斯奥纳怎么取时光网的票? 神枪电视剧好看吗? 大家觉得飞虎好看,还是神枪狙击好看 11月初5与11月5日有什么区别 农历11月初5是那一日 今年农历11月5日是新历几号 液压图上的3/4''SAE3000是什么意思 简历上交组织部后什么时间启动人事问题? 超生违法的处罚标准是什么 腾讯人工客服的电话是多少 单身女人的幽默称呼 属猪种什么花最旺财 有道查词快捷键_有道词典截图快捷键 存款2个月存什么样比较好 左肺尖可见纤维增殖灶是什么意思 左肺下叶纤维增殖灶是什么病 指甲油吃了一点怎么办