我正在尝试创建这样的通用控件
dynamic-control.ts
import { Component, Input } from '@angular/core';
@Component({
selector: 'ngo-button',
template: `<button [ngClass]=class type={{type}}>{{message}}</button>`,
styles: [`.one{border:solid 2px yellow} .two{background-color:pink} .three{
background-color: blue;
}`]
})
export class HelloComponent {
@Input() type: string = 'button';
@Input() class: string = 'one three';
@Input() message: string = 'submit';
}
main-component.html
<ngo-button [class]='btn two' (click)='somefunc()'></ngo-button>
现在我想将两个类传递给按钮,但是当我尝试以这种方式传递它时,出现错误
[class] ='btn two'
我想,我们不允许在输入参数中添加空格,还有另一种实现方法吗?
答案 0 :(得分:7)
<ngo-button [class]="'btn two'" (click)='somefunc()'></ngo-button>
Angular的默认语法。如果使用[input]
表示法,则必须在引号中提供一个字符串。
否则:
<ngo-button class="btn two" (click)='somefunc()'></ngo-button>
尽管我不得不说,但它真的不明白为什么您使用输入来提供组件的类。
答案 1 :(得分:2)
您可以使用[ngClass]
<ngo-button [ngClass]="{'first class':{expression},'second class':{expression}}" (click)='somefunc()'></ngo-button>
N.B:表达式类似于:true / false,2> 1等。
记住:删除{expression}中的{}
答案 2 :(得分:1)
<ngo-button [class]="'button'" (click)='somefunc()'></ngo-button>
答案 3 :(得分:0)
如果在Angular中使用方括号[],则是在告诉Angular编译器以下内容是要解析的表达式。由于btn two
不是有效的表达式,因此您遇到了解析错误。您实际要做的是:
[class]="'btn two'"
。
值得一提的是,由于您已选择将输入命名为“类”,因此以后Angular可能会遇到问题,既将值作为输入参数传递给,又将应用为父元素的类。