我有一个带有属性的组件。我想在输入更改时为这些属性分配新值。因为我有很多属性(它们在svg模板中用作文本),所以我想迭代它们并为它们分配新值。我尝试了以下方法,但没有成功,我想不出任何可行的方法。
@Component({
selector: 'app-my-component',
templateUrl: './my.svg',
styleUrls: ['./my-component.scss']
})
export class MyComponent implements OnInit {
@Input() aMapWithNewNumbers: Map<string,number>;
PropertieA = 1;
PropertieB = 2;
...
PropertieZ = 3;
ngOnChanges(changes: SimpleChanges): void {
if(changes.aMapWithNewNumbers.currentValue){
const list = Object.key(this);
list.forEach((elem) => {
if(this.aMapWithNewNumbers.get(elem) != undefined){
const num = this.aMapWithNewNumbers.get(elem);
elem = num; //<= this doesn't work since elem is of type string
}
});
}
}
...
我的SVG模板如下所示:
<svg ...>
...
<text ...>{{PropertieA}}</text>
<text ...>{{PropertieB}}</text>
...
<text ...>{{PropertieZ}}</text>
...
</svg>
感谢您的帮助!
对组件对象的键进行迭代不是一种常见的模式,通常可以使用另一种数据结构。在这种情况下,我认为您可以通过直接绑定到html中现有的map Input来使用它:[myProp]="aMapWithNewNumbers?.get('myPropertyName')"
。
您可以尝试以下操作:
var myProperties = {
property1: true,
property2: 25,
property3: 'PropertyValue',
};
for (const property in myProperties) {
if (property === 'property1')
{
myProperties[property] = false;
}
}
for (const property in myProperties) {
console.log(property);
console.log(myProperties[property]);
}
如果发现问题。我必须用this[elem]
来说明对象的性质。比它有效。所以评论行将是
this[elem] = num;