2016-12-31 9 views
1

値:combineLatestエラーは、私は次のことを持っている

static phones: Map<number, {}> = new Map<number, {}>(); 
... 

    Observable.combineLatest(
     this.form.statusChanges, 
     this.form.valueChanges, 
     (status, value) => ({ status, value })) 
       .debounceTime(500) 
       .subscribe(
        ({ status, value }) => { 

         PhoneComponent.phones.set(this.rowIndex, value); 
} 

フォームを初めて有効になると、マップの値が問題なく設定されています。

phone.component.ts:137 Uncaught TypeError: PhoneComponent_1.phones.set is not a function

:しかし、私はもう一度、フォームの値に変更する必要がある場合、私は(PhoneComponentがcombineLatestが使用されている私のカスタムコンポーネントである)

Angular 2 is running in the development mode. Call enableProdMode() to enable the production mode. 
error_handler.js:47 EXCEPTION: PhoneComponent_1.phones.set is not a function 
ErrorHandler.handleError @ error_handler.js:47 
next @ application_ref.js:272 
schedulerFn @ async.js:82 
SafeSubscriber.__tryOrUnsub @ Subscriber.js:223 
SafeSubscriber.next @ Subscriber.js:172 
Subscriber._next @ Subscriber.js:125 
Subscriber.next @ Subscriber.js:89 
Subject.next @ Subject.js:55 
EventEmitter.emit @ async.js:74 
NgZone.triggerError @ ng_zone.js:278 
onHandleError @ ng_zone.js:257 
ZoneDelegate.handleError @ zone.js:236 
Zone.runTask @ zone.js:157 
ZoneTask.invoke @ zone.js:335 
data.args.(anonymous function) @ zone.js:970 
error_handler.js:52 ORIGINAL STACKTRACE: 
ErrorHandler.handleError @ error_handler.js:52 
next @ application_ref.js:272 
schedulerFn @ async.js:82 
SafeSubscriber.__tryOrUnsub @ Subscriber.js:223 
SafeSubscriber.next @ Subscriber.js:172 
Subscriber._next @ Subscriber.js:125 
Subscriber.next @ Subscriber.js:89 
Subject.next @ Subject.js:55 
EventEmitter.emit @ async.js:74 
NgZone.triggerError @ ng_zone.js:278 
onHandleError @ ng_zone.js:257 
ZoneDelegate.handleError @ zone.js:236 
Zone.runTask @ zone.js:157 
ZoneTask.invoke @ zone.js:335 
data.args.(anonymous function) @ zone.js:970 
error_handler.js:53 TypeError: PhoneComponent_1.phones.set is not a function 
    at SafeSubscriber.__WEBPACK_IMPORTED_MODULE_2_rxjs__.Observable.combineLatest.debounceTime.subscribe [as _next] (phone.component.ts:137) 
    at SafeSubscriber.__tryOrUnsub (Subscriber.js:223) 
    at SafeSubscriber.next (Subscriber.js:172) 
    at Subscriber._next (Subscriber.js:125) 
    at Subscriber.next (Subscriber.js:89) 
    at DebounceTimeSubscriber.debouncedNext (debounceTime.js:98) 
    at AsyncAction.dispatchNext (debounceTime.js:114) 
    at AsyncAction._execute (AsyncAction.js:111) 
    at AsyncAction.execute (AsyncAction.js:86) 
    at AsyncScheduler.flush (AsyncScheduler.js:36) 
ErrorHandler.handleError @ error_handler.js:53 
next @ application_ref.js:272 
schedulerFn @ async.js:82 
SafeSubscriber.__tryOrUnsub @ Subscriber.js:223 
SafeSubscriber.next @ Subscriber.js:172 
Subscriber._next @ Subscriber.js:125 
Subscriber.next @ Subscriber.js:89 
Subject.next @ Subject.js:55 
EventEmitter.emit @ async.js:74 
NgZone.triggerError @ ng_zone.js:278 
onHandleError @ ng_zone.js:257 
ZoneDelegate.handleError @ zone.js:236 
Zone.runTask @ zone.js:157 
ZoneTask.invoke @ zone.js:335 
data.args.(anonymous function) @ zone.js:970 
phone.component.ts:137 Uncaught TypeError: PhoneComponent_1.phones.set is not a function 
    at SafeSubscriber.__WEBPACK_IMPORTED_MODULE_2_rxjs__.Observable.combineLatest.debounceTime.subscribe [as _next] (phone.component.ts:137) 
    at SafeSubscriber.__tryOrUnsub (Subscriber.js:223) 
    at SafeSubscriber.next (Subscriber.js:172) 
    at Subscriber._next (Subscriber.js:125) 
    at Subscriber.next (Subscriber.js:89) 
    at DebounceTimeSubscriber.debouncedNext (debounceTime.js:98) 
    at AsyncAction.dispatchNext (debounceTime.js:114) 
    at AsyncAction._execute (AsyncAction.js:111) 
    at AsyncAction.execute (AsyncAction.js:86) 
    at AsyncScheduler.flush (AsyncScheduler.js:36) 
__WEBPACK_IMPORTED_MODULE_2_rxjs__.Observable.combineLatest.debounceTime.subscribe @ phone.component.ts:137 
SafeSubscriber.__tryOrUnsub @ Subscriber.js:223 
SafeSubscriber.next @ Subscriber.js:172 
Subscriber._next @ Subscriber.js:125 
Subscriber.next @ Subscriber.js:89 
DebounceTimeSubscriber.debouncedNext @ debounceTime.js:98 
dispatchNext @ debounceTime.js:114 
AsyncAction._execute @ AsyncAction.js:111 
AsyncAction.execute @ AsyncAction.js:86 
AsyncScheduler.flush @ AsyncScheduler.js:36 
ZoneDelegate.invokeTask @ zone.js:265 
onInvokeTask @ ng_zone.js:227 
ZoneDelegate.invokeTask @ zone.js:264 
Zone.runTask @ zone.js:154 
ZoneTask.invoke @ zone.js:335 
data.args.(anonymous function) @ zone.js:970 
+0

plunkerにこの問題を提出してください。[this one](http://embed.plnkr.co/w2FVfKlWP72pzXIsfsCU/)をテンプレートとして使用できます。 –

答えて

0

エラーが間違っているものを言います、以下の例外を取得しますしたがって、問題はcombineLatestにありません。

phonesプロパティが設定されています(nullではありません)。setメソッドはありません。 Map.setは存在するはずですので、phonesはあなたの考えではありません(多分あなたはどこかでそれを無効に上書きするでしょう)。あなたがコンパイルJSを見ればあなたは、静的プロパティが初期化される前に、あなたがObservable.combineLatestを呼ぶ可能性があることがわかりますので

class A { 
    static m: Map<number, {}> = new Map<number, {}>(); 
} 

A.m.set(1, {'a': 123}); 
A.m.set(2, {'a': 321}); 

console.log(A.m); 

作品上記の例だが、あなたがObservable.combineLatestを呼んで見て:

var A = (function() { 
    function A() { 
    } 
    return A; 
}()); 
A.m = new Map(); 
A.m.set(1, { 'a': 123 }); 
A.m.set(2, { 'a': 321 }); 
console.log(A.m); 
+0

ありがとうございます。あなたは正しいです。私はエラーを見ましたが、しばらくしてもそれを理解できませんでした。店にアクセスして問題を起こしているもう1つの観察がありました。コメントした後、すべてが期待どおりに実行されました。 –

関連する問題