我想在ngStyle中设置两个函数。我已经尝试了[ngStyle]="setAlignmentStyle(element.alignment);setShapeStyle(element.shape);"
,但它提供了模板解析错误。
我应该如何在ngStyle中设置两个函数?
page.component.ts
export class PageComponent {
// ...
setAlignmentStyle(alignment) {
let styles = {
'margin': alignment === 'center' ? '0 auto' : '',
'float': alignment === 'right' ? 'right' : (alignment === 'left' ? 'left' : ''),
};
return styles;
}
setShapeStyle(shape) {
let styles = {
'border-radius': shape === 'circle' ? '50%' : '',
};
return styles;
}
}
page.component.html
<div [ngStyle]="setAlignmentStyle(element.alignment);setShapeStyle(element.shape);">{{element.text}}</div>
答案 0 :(得分:2)
ngStyle
不会合并多个对象。
不鼓励在视图中使用函数(事件处理程序除外),因为这些函数经常被调用。
在您的情况下,这将导致异常,因为每次都返回一个返回新实例的方法。
export class PageComponent {
styles = {}
ngOnInit() {
this.setAlingmentStyle('xxx');
this.setShapeStyle('yyy');
}
// ...
setAlignmentStyle(alignment) {
this.styles.margin = alignment === 'center' ? '0 auto' : '';
this.styles.float = alignment === 'right' ? 'right' : (alignment === 'left' ? 'left' : ''),
};
}
setShapeStyle(shape) {
this.styles[
'border-radius'] = shape === 'circle' ? '50%' : '',
}
}
然后像
一样使用它<div [ngStyle]="styles">{{element.text}}</div>
答案 1 :(得分:2)
setStyles(alignment, shape: string) {
let styles = {};
switch(alignment){
case 'center' :
styles.margin = '0 auto';
break;
case 'right' :
styles.float = 'right';
break;
case 'left' :
styles.float = 'left';
break;
}
switch(shape){
case 'circle' :
styles['border-radius'] = '50%';
break;
}
return styles;
}
// HTML
<div [ngStyle]="setStyles(element.alignment, element.shape);">{{element.text}}</div>
答案 2 :(得分:2)
我应用了Decorator设计原理(它不是严格的Decorator)。
export class PageComponent {
// ...
setAlignmentStyle(alignment, styles) {
styles = styles || {};
styles.margin = alignment === 'center' ? '0 auto' : '';
styles.float = alignment === 'right' ? 'right' : (alignment === 'left' ? 'left' : '');
return styles;
}
setShapeStyle(shape, styles) {
styles = styles || {};
styles['border-radius'] = shape === 'circle' ? '50%' : '';
return styles;
}
}
<div [ngStyle]="setAlignmentStyle(element.alignment, setShapeStyle(element.shape))">{{element.text}}</div>