2016-03-16 45 views
3

这是我的代码编译时会抛出错误:打字稿错误:属性“价值”并不在类型存在“可观察<any>”

export class NoticeService { 
    public notice: Observable<any>; 
    private observer: any; 

    constructor(private translate: TranslateService) { 
    this.notice = new Observable(observer => { 
     this.observer = observer; 
    }).share(); 
    } 

    create(value: string) { 
    let translatedValue = this.translate.get(value).value; 
    this.observer.next(translatedValue); 
    } 
} 

console.log(this.translate.get(value))输出为:

ScalarObservable {_isScalar: true, value: "Some proper value!", etc. 

的输出console.log(translatedValue)是:

"Some proper value!" 

错误是:

ERROR in [default] /somePath/notice.service.ts:21:52 
Property 'value' does not exist on type 'Observable<any>'. 

线路21:

let translatedValue = this.translate.get(value).value; 

出了什么问题?


更新:

我使用NG2-翻译,这是get方法:返回

/** 
* Gets the translated value of a key (or an array of keys) 
* @param key 
* @param interpolateParams 
* @returns {any} the translated key, or an object of translated keys 
*/ 
TranslateService.prototype.get = function (key, interpolateParams) { 
    var _this = this; 
    if (!key) { 
     throw new Error('Parameter "key" required'); 
    } 
    // check if we are loading a new translation to use 
    if (this.pending) { 
     return this.pending.map(function (res) { 
      return _this.getParsedResult(_this.parser.flattenObject(res), key, interpolateParams); 
     }); 
    } 
    else { 
     var translations = void 0; 
     if (this.translations[this.currentLang]) { 
      translations = this.parser.flattenObject(this.translations[this.currentLang]); 
     } 
     return Observable_1.Observable.of(this.getParsedResult(translations, key, interpolateParams)); 
    } 
}; 
+0

什么是'TranslateService'的'GET'方法的内容?谢谢! –

+0

谢谢您的回复,我更新了我的问题。 –

+1

谢谢!既然可观察物被返回,你为什么不订阅呢?就像这样:'this.translate.get(value).subscribe(translatedValue => this.observer.next(translatedValue));' –

回答

7

由于可观察到的,需要申请就可以了。事情是这样的:

create(value: string) { 
    this.translate.get(value).subscribe(translatedValue => { 
    this.observer.next(translatedValue); 
    }); 
} 

,而不是尝试直接从中获得价值...

1

要谁也寻求一种更方便的方法的任何用户:在此期间开发商NG2,添加翻译直接加载该值的'instant()'方法(必须首先加载您的TranslationLoader才能正常工作):请参阅https://github.com/ocombe/ng2-translate/issues/20,或者,如果在使用translate.instant(key)之前,TranslationLoader未发生加载并且只有钥匙可见,另一个问题通过等待onLangChange事件处理:https://github.com/ocombe/ng2-translate/issues/85

constructor (private translate : TranslateService){ 
    translate.onLangChange.subscribe((event: LangChangeEvent) => { 
     ... 
     let lesson = new Lesson(); 

     lesson.title = translate.instant("lesson_1_title"); 

     }); 
} 

不要忘记从加载LangChange在.TS控制器文件的标题NG2翻译:

import {TranslatePipe,TranslateService, LangChangeEvent} from 'ng2-translate/ng2-translate'; 
相关问题