我分配从端点接收的数组数据。
我尝试在另一个文件中调用此数组,但它不喜欢它! 我的subscriberNames阵列控制台正确。
我的第一个文件:
export class EngagementService {
public orgSubSidNames = [];
let subsidiaryNames = []
data.forEach(sub => {
console.log(sub.SubsidiaryName)
subsidiaryNames.push(sub.SubsidiaryName)
})
subsidiaryNames = subsidiaryNames.filter(this.onlyUnique);
console.log('subsidiary name array' + subsidiaryNames)
this.orgSubSidNames = subsidiaryNames;
// This is just a sample script. Paste your real code (javascript or HTML) here.
if ('this_is' == /an_example/) {
of_beautifier();
} else {
var a = b ? (c % d) : e[f];
}
第二个文件:
export class EngagementFilterComponent implements OnInit {
public subSidNameArray: EngagementService;
updateSub(data) {
console.log(data);
console.log('attempting to print the subsid array' + this.subSidNameArray.orgSubSidNames)
}
我得到了错误:
Cannot read property 'orgSubSidNames' of undefined
答案 0 :(得分:2)
您永远不会设置属性public subSidNameArray: EngagementService;
答案 1 :(得分:1)
在创建EngagementFilterComponent
const filter = new EngagementFilterComponent()
filter.subSidNameArray = new EngagementService()
或在构造函数中设置
public subSidNameArray: EngagementService = new EngagementService()
或使用注射
如果您的框架使用注入,请确保您的接收组件使用适当的构造函数。 constructor(private engagementService: EngagementService)
行
public subSidNameArray: EngagementService
声明您的类包含EngagementService
的实例。您尚未创建一个。必须使用new
关键字创建该类的实例。 :EngagementService
部分是typescript
,用于声明subSidNameArray
的类型,这是普通javascript
中找不到的功能。但是它不会创建实例。
答案 2 :(得分:1)
subSidNameArray
需要在某个地方初始化,而不仅仅是声明。正如其他人回答的那样,您可以使用new EngagementService()
对其进行显式分配,但是如果使用Angular,则“正确”的处理方式是在第二个文件中使用依赖注入(DI):>
constructor(private engagementService: EngagementService) {...}
通过在类声明之前添加EngagementService
装饰器,确保您的@Injectable
可注射:
@Injectable({
providedIn: 'root'
})
export class EngagementService {
...
}