我有服务:
import {eventsData} from 'services/eventsData';
import {singleton} from 'aurelia-framework';
@singleton()
export class DataRepository{
constructor(){
}
getEvents(){
var promise = new Promise((resolve,reject)=>{
if(!this.events){
setTimeout(_=>{
this.events = eventsData;
resolve(this.events);
},2000)
}
else{
resolve(this.events);
}
});
return promise;
}
getEvent(eventId){
return this.events.find(event => event.id == eventId);
}
}
我正在发起的:
import {inject} from 'aurelia-framework';
import {DataRepository} from 'services/datarepository';
@inject(DataRepository)
export class events{
constructor(dataRepository, lazyOfImLazy){
dataRepository.getEvents().then(events => this.events = events);
}
createAndUseLazy(){
console.log("About to use lazy");
this.lazyOfImLazy().doStuff();
}
}
然后在:
import {inject} from 'aurelia-framework';
import{DataRepository} from 'services/dataRepository';
@inject(DataRepository)
export class EventDetail{
constructor(dataRepository){
this.dataRepository = dataRepository;
}
activate(params, routeConfig){
console.log(params.eventId);
console.log(this.dataRepository);
this.event = this.dataRepository.getEvent(1);
}
}
但是在调用this.dataRepository.getEvent(1)
时,在dataRepository return this.events.find(event => event.id == eventId);
中,this.events
未定义。我原以为通过将它定义为单例,它会在promise中实例化时保留this.events。然后正确填充this.events。事件的观点正在使用它。
我错过了什么吗?
答案 0 :(得分:1)
想出来:导入区分大小写。
import{DataRepository} from 'services/datarepository';
和import{DataRepository} from 'services/dataRepository';
注意到第一行中的datarepository中的较低的cased r和第二行中的dataRepository中的大写r。
它创建了同一服务的两个不同实例,因为字符串之后的区分大小写不同。
对于那些遇到过这种情况的人,花了几个小时试图解决这个问题:)