angular - 如何使用 Renderer2 将组件或元素移动到 Angular Material Datepicker Calendar 弹出窗口中?
问题描述
我正在实现 Angular Material Date Rage Picker,并希望将一个组件或元素插入到日历弹出窗口中。目前,我可以通过直接 DOM 操作来做到这一点。我想知道如何使用 Renderer2 或其他不直接操作 DOM 的工具来完成此操作。
在代码中,我等待从mat-date-range-picker
元素“打开”的事件。当它执行时,我运行这个函数:
calendarOpen() {
// todo: not working
this._moveShortcutsListWithRender2();
// this is working
// this._moveShortcutsListWithDocument();
}
private _moveShortcutsListWithRender2() {
const matDatepickerPopup = this._renderer2.selectRootElement(
'mat-datepicker-content'
)[0];
const matCalendar = this._renderer2.selectRootElement('mat-calendar')[0];
this._renderer2.insertBefore(
matDatepickerPopup,
this.shortcutsList,
matCalendar
);
}
private _moveShortcutsListWithDocument() {
const calendar = document.getElementsByClassName(
'mat-datepicker-content'
)[0];
const shortcutList = document.createElement('ul');
shortcutList.classList.add('date-picker-calendar-shortcuts-list');
calendar.appendChild(shortcutList);
if (this.shortcuts) {
this.shortcuts.forEach((shortcut, index) => {
let listItem = document.createElement('li');
listItem.setAttribute('id', `listItem${index}`);
shortcutList.appendChild(listItem);
const listItemElement = document.getElementById(`listItem${index}`);
if (!!listItemElement && !!shortcut.label) {
listItemElement.innerText = shortcut.label;
}
});
}
calendar.appendChild(shortcutList);
}
这是我要完成的工作的图片:
在这里你可以找到我放在一起的代码=
如果取消注释// this._moveShortcutsListWithDocument();
,您会发现此控制台错误:
解决方案
推荐阅读
- php - PHP mb_ereg_replace 不替换 UTF-8 字符
- spring-cloud - 用于 SSL 的 Spring Cloud Stream Binder Solace 配置
- python - 如果是奇数则返回数字的平方,如果是偶数则返回 (number-1) 平方
- asp.net-core - 在运行时应用迁移有什么缺点?
- mongodb - MongoDB查询优化或提高性能
- julia - 错误:MethodError:没有方法匹配 abs(::Array{Complex{Float64},1})
- json - Delphi 7:处理从网站读取的 JSON 响应中的 utf-8 数据
- r - 在shinyapps.io 上部署闪亮的应用程序时出错
- angularjs-directive - 如果绑定数据为空,想在 md-option 中显示自定义文本
- c - 使用单指针代替双指针