Aurelia - 注入服务,但其属性仍未定义

时间:2017-01-26 20:45:59

标签: caching code-injection aurelia

我有服务:

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。事件的观点正在使用它。

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

想出来:导入区分大小写。

import{DataRepository} from 'services/datarepository';import{DataRepository} from 'services/dataRepository';注意到第一行中的datarepository中的较低的cased r和第二行中的dataRepository中的大写r。

它创建了同一服务的两个不同实例,因为字符串之后的区分大小写不同。

对于那些遇到过这种情况的人,花了几个小时试图解决这个问题:)