Angular2 RC3 (Angular-CLI を使用) で最初のアプリを試したところ、これで迷ってしまいました...
variable の「変更検出」に問題がありますword
。Observableword
のメソッド内の変数を更新しましたが、変更は検出されませんでした。subscribe
app.component.ts
import { Component, Inject, OnInit } from '@angular/core';
import { VoiceRecognitionService } from './voice-recognition.service';
@Component({
moduleId: module.id,
selector: 'app-root',
template: `<h1>{{word}}</h1>`, // => No prints any update
providers: [VoiceRecognitionService],
styleUrls: ['app.component.css']
})
export class AppComponent implements OnInit {
private voice: VoiceRecognitionService;
public word: string = '';
constructor( @Inject(VoiceRecognitionService) voiceRecognition: VoiceRecognitionService) {
this.voice = voiceRecognition;
}
ngOnInit() {
this.voice.record('ca')
.subscribe(word => {
console.log(word); // => Is printing well the new word
this.word = `${word}...`; // => No changes detected
});
}
}
Angular 1$scope.$apply
で同様のケースに を使用したことを覚えています。同じように Angular2 を検索したところNgZone.run
、 が見つかりました。内部NgZone.run
で実行しようとしましたが、何もありませんでした。
私が間違っていることは何ですか?
どうもありがとう。
追加:
サービスを Observable と共有します。
音声認識.service.ts
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Rx';
export interface IWindow extends Window {
webkitSpeechRecognition: any;
}
@Injectable()
export class VoiceRecognitionService {
constructor() {
/* void */
}
/**
* Record
* @param {string} language - Language of the voice recognition
* @returns {Observable<string>} - Observable of voice converted to string
*/
record(language: string): Observable<string> {
return Observable.create((observer) => {
const { webkitSpeechRecognition }: IWindow = <IWindow>window;
const recognition = new webkitSpeechRecognition();
recognition.onresult = (e) => observer.next(e.results.item(e.results.length - 1).item(0).transcript);
recognition.onerror = observer.error;
recognition.onend = observer.completed;
recognition.continuous = true;
recognition.interimResults = true;
recognition.lang = language;
recognition.start();
});
}
}