angular - 上下文。$隐式。不是功能打字稿错误
问题描述
我有以下课程
import { ClassAsset } from './class-asset';
export class Class {
ClassId:string;
ClassName:string;
Assets:ClassAsset[];
GetAssetsString():string{
var str:string;
this.Assets.forEach(a=>{
str+=a.AssetName;
});
return str;
}
使用以下角度视图代码
<tr *ngFor="let cls of classList">
<td>{{cls.className}}</td>
<td>{{cls.GetAssetsString()}}</td>
</tr>
我的组件看起来像这样
export class ClassesComponent implements OnInit {
private _client:HttpClient;
public classList:Class[]=[];
constructor(client:HttpClient,private route:Router,private datasource:DataService) {
this._client=client;
}
ngOnInit() {
this.getClasses();
}
getClasses()
{
this.datasource.getClassList().subscribe((resp:Class[])=>{
console.log(resp);
this.classList=resp;}
);
}
}
但是我得到了错误
TypeError: _v.context.$implicit.GetAssetsString 不是函数
我究竟做错了什么?(我还在习惯 Typescript ......)
解决方案
因为您将从服务器收到的响应转换为您的Class对象。很可能它是一个有数据但没有功能的对象。这就是GetAssetsString函数在您的代码中不可用的原因。
话虽如此,您可以像这样在Class对象中创建一个构造函数
export class Class {
ClassId:string;
ClassName:string;
Assets:ClassAsset[];
constructor(obj?:any){
this.ClassId= obj && obj.ClassId || '';
this.ClassName= obj && obj.ClassName || '';
this.Assets = obj && obj.Assets || [];
}
GetAssetsString():string{
var str:string;
this.Assets.forEach(a=>{
str+=a.AssetName;
});
return str;
}
}
你的 getClasses 方法会像这样修改
getClasses()
{
this.datasource.getClassList().pipe(map(response =>
response.json())).subscribe(x=>{
this.classList= x.map(x1=>new Class(x1));
});
}
谢谢。
推荐阅读
- regex - Spark sql regexp_extract选择数字错误
- sql - 插入和连接表以更新后触发
- reactjs - 将联合类型传递给 React 的 useRef 不起作用
- microsoft-teams - MS Teams 的自适应卡片 - 图像显示在 Web 界面中,但不显示在桌面应用程序中
- php - wp_enqueue_script 不会在 Wordpress 主题的 function.php 中加载
- gitlab-api - 如何在没有身份验证的情况下获取项目的公共片段?
- excel - 下标超出范围错误,错误弹出框中不显示调试按钮
- mysql - 第一范式的外键?
- python - 如何返回正确使用带有修饰符的字母
- html - 如何保持动画链接下划线效果但使整个区域可点击(没有 onclick 也没有额外的 div)