- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试创建一个将根据所选元素的宽度调整大小的选择。
这是 jQuery/Javascript 中的实现:Drop down list width fit selected item text
我遇到的问题是样式总是空的。如果我尝试将 mainSelectElement 设置为 hiddenSelectElement,它几乎消失了。原因是 nativeElement.style.width 为空。我将样式属性记录到控制台,每个属性都是空白的。我们也有全局样式应用于选择,但这些也没有出现。
有谁知道为什么我的样式是空白的?这与影子 DOM 有关系吗?最重要的是,有什么解决方案吗?
import { Component, Input, Output, EventEmitter, forwardRef, ViewChild, ElementRef, Renderer } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
const SELECT_RESIZE_VALUE_ACCESSOR: any = {
provide: NG_VALUE_ACCESSOR,
useClass: forwardRef(() => SamSelectResizableComponent),
multi: true
}
@Component({
selector: 'sam-select-resizable',
template: `
<select #mainSelectElement [ngModel]="selected" (ngModelChange)="updateSelected($event)">
<ng-content></ng-content>
</select>
<select #hiddenSelectElement>
<option >{{selected}}</option>
</select>
`,
providers: [
SELECT_RESIZE_VALUE_ACCESSOR
]
})
export class SamSelectResizableComponent implements ControlValueAccessor {
@ViewChild('hiddenSelectElement') hiddenSelectElement: ElementRef;
@ViewChild('mainSelectElement') mainSelectElement: ElementRef;
public selected: any;
private onChangeCallback: (_: any) => void = (_: any) => {};
private onTouchedCallback: () => void = () => {};
get value(): any {
return this.selected;
}
set value(val: any) {
if (val !== this.selected) {
this.selected = val;
this.onChangeCallback(this.selected);
}
}
constructor(private renderer: Renderer) {}
updateSelected(event) {
this.selected = event;
const hiddenWidth = this.hiddenSelectElement.nativeElement.style.width;
this.renderer.setElementStyle(this.mainSelectElement.nativeElement, 'width', hiddenWidth);
}
writeValue(value: any) {
if (value !== this.selected) {
this.selected = value;
this.onChangeCallback(this.selected);
}
}
registerOnChange(fn: any) {
this.onChangeCallback = fn;
}
registerOnTouched(fn: any) {
this.onTouchedCallback = fn;
}
}
最佳答案
这是在应用样式后获取样式的一些好方法。对于任何 HTML 元素,最初所有样式属性都是空的。
window.getComputedStyle() 可能会解决您的问题。
// fetch styles for an element
style = window.getComputedStyle(hiddenSelectElement.nativeElement, null);
// fetch the property values for any style attribute
console.log(style.getPropertyValue("width"));
对于像 ::before
和 ::after
这样的伪元素
// fetch styles for an element
style = window.getComputedStyle(hiddenSelectElement.nativeElement, ':before');
// fetch the property values for any style attribute
console.log(style.getPropertyValue("width"));
引用:https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle
关于javascript - nativeElement.style 上的所有属性都是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43125710/
我正在研究 IONIC 3,现在我正在使用 Google Maps API 开发一个应用程序。问题是我正在尝试执行我的应用程序,但是当它启动时,会出现此消息: inicio.html Error: U
有没有一种简单的方法可以从组件实例中获取 nativeElement(或 ElementRef)?我正在从这样的 View 中引用一个组件: @ViewChild(MyComponent) myCom
我正在尝试绘制由一条线连接的两个 div(每个包含组件)。线的长度取决于我使用 nativeElement 属性访问的 div 的宽度。 当我在模板中使用 [style.width] 属性,并调用函数
我正在尝试访问 Angular2 中 div 的高度 HTML TS @ViewChild('ccww') CW; ngAfterViewInit() { var cwElement = thi
我正在尝试创建一个将根据所选元素的宽度调整大小的选择。 这是 jQuery/Javascript 中的实现:Drop down list width fit selected item text 我遇
this.child02.nativeElement 未定义,我不明白为什么。我究竟做错了什么?谢谢你。这是我的 current stackblitz. 应用程序组件.ts: import { Com
在我的父组件中,我有一个 btn 和一个设置菜单指令。我想要做的是将 elementref#navBtn 作为输入传递到设置菜单中。 ... @ViewCh
我正在开发一个将下拉列表转换为 radioListbox 的 Angular Directive(指令)。这是我的初始代码: import { Directive, Input, TemplateRe
我正在尝试使用 this example 添加“剪贴板”指令.该示例现在已过时,因此我不得不更新它获取 nativeElement 的方式。 我遇到了错误 Cannot read property '
我一直在尝试对单击调用函数的提交按钮的 Angular 2 应用程序执行测试。我通常使用两种方法来执行相同的操作。 element.nativeElement.click() 和 element.tr
我知道不建议使用 replace elementRef.nativeElement,建议用 ViewChild 或类似的标签替换 iT。我想知道当我有一个通用类型的 native 元素时,如何使用这些
我正在尝试访问 ViewChildren 的 native 元素 => HTMLElements,但这样做时我一直收到 undefined 响应。看一看: 列表.html .. .. 列表.ts
免责声明:我刚刚发现我的问题几乎与这个问题重复:Angular get nested element using directive on parent 问题本身并不相同,但接受的答案解决了我的问题
我一直在浏览 Angular 网站上的测试教程。我很好奇是否有可用于通过 debugElement 进行测试的所有项目的列表。例如 let nav = fixture.debugElement.que
当我使用 WatiN 进行测试时,我喜欢保存屏幕截图。有时我并不真的需要整个浏览器窗口的图片 - 我只需要一张我正在测试的元素的图片。 我尝试使用以下代码保存元素的图片,结果生成了 block 框的图
我刚刚了解到关键字“nativeElement”不兼容跨浏览器,例如: let whatever = this.$elementRef.nativeElement; whatever.style.di
我想在组件中的 HTML 元素上调用 scrollIntoView。但是我遇到了如下错误。 ERROR TypeError: "_this.scrollableDiv.nativeElement is
我无法获取自定义元素的 nativeElement 引用。我有一个这样的模板: 用于访问的代码:@ViewChild('testone') el: ElementRef; 当我这样做时我得到
我正在设置超时以销毁 Angular 2 上的组件,该组件可能会在调用超时之前被销毁。无论哪种方式调用超时,它都会对组件的 native 元素执行 .remove()(即使它不再位于 dom 中)。
我正在尝试以 Angular 2 创建一个按钮组件。在主机上,我必须设置一个动态生成的 css 类名。 (取决于绑定(bind)属性) 主机上的“[ngClass]”不起作用。 我读过使用 eleme
我是一名优秀的程序员,十分优秀!