即时通讯实验与Angular2,并得到了点,我想有动态样式扩展im Angular2组件。为了让事情更清楚,下面是一些代码。角2奇怪的行为:根元素风格属性是空字符串
main.ts
import {bootstrap} from 'angular2/platform/browser';
import {App} from './app'
bootstrap(App).then(error => console.log(error));
app.ts
import { Component } from 'angular2/core';
import { Button } from './button';
@Component({
selector: 'app',
template: `<button [style.background]="'green'">Hallo Welt</button>`,
directives: [Button]
})
export class App { }
button.ts
import {Component, Input, ElementRef, Renderer} from "angular2/core";
import {BrowserDomAdapter} from "angular2/src/platform/browser/browser_adapter";
@Component({
selector: 'button',
templateUrl: '<span [style.color]="test"><ng-content></ng-content></span>',
providers: [BrowserDomAdapter]
})
export class Button {
test: string;
constructor(private renderer:Renderer, private elementRef:ElementRef, dom: BrowserDomAdapter) {
let styles = elementRef.nativeElement.style;
console.log(styles);
this.test = styles['background'] || 'red';
console.log(this.test);
}
}
现在的东西我会调用一个奇怪的行为。以防万一:我对DOM操作不是很熟悉,但是我现在在这个问题上花了几个小时而没有得到答案。
当你运行这个程序,你在控制台下面的输出:
- 的CSSStyleDeclaration {...}
- 红色*
*款式[ '背景']是只是一个空字符串
但在CSSStyleDeclaration'背景'被设置为“绿色”,就像预期的那样,因为它是内联样式。
为了测试它,我也尝试了不同的浏览器(只是Chrome和Firefox在这里),并测试了“style'-地产本网站上(它工作正常,在这里):
http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_style_get_elmnt
经过所有这些测试后,我没有找到适当的解决方案。即使BrowserDomAdapter也不起作用,因为它使用完全相同的代码来转到样式属性。
这是Angular2 Framework的一个bug。如果是,它会被报告,并且有任何解决方法。如果没有,是否有任何解决方法,或将来会改变。
该功能不是非常必要的,但会帮助我完成工作。我需要这个的原因是因为我使用动态生成的样式表,并且我的组件的用户应该可以用ngStyle和Angular2的'[style.property]'语法覆盖它们。请注意,出于某些原因,我不会使用Component-Decorator的'style'属性并将它们包含在内。
谢谢你的帮助。