問題タブ [angular2-changedetection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1566 参照

angular - angular 2コンポーネントでモデルが変更されたかどうかを確認します

まず、私のコードは機能しています。この質問は、私が適切なことをしているかどうか、およびangular 2の力を使用しているかどうかに関するものです。私はangular 1から来て、angular 2のコアコンセプトをまだ学んでいます。

はじめましょう:

angular 2 アプリ (RC.4) が与えられた場合、カレンダーをビューとしてレンダリングするカレンダー コンポーネントがあります。各カレンダーの日は、API レスト コールの結果に応じて、赤 (ビジー) または緑 (フリー) で「装飾」されます。特定の日のデータがない場合、その日はまったく装飾されません。

したがって、カレンダーの @component に次の Observable があります。解決されると、コンポーネントの「エントリ」のプロパティに応答が入力されます。(応答は、プロパティ「dayStatus」がビジー/グリーンに設定された日のオブジェクトの配列です)。

カレンダー テンプレートには、decorateDay() ハンドラに解決される ngClass があります。

したがって、すべての「日」は、宣言的な方法で、decorateDay(day) ハンドラーを介して、緑または赤で装飾する必要があるかどうかを調べます。次のように機能します。「日」はパラメーターとして渡され、JSON 配列から関連するオブジェクトを取得するためのキーとして使用されます。オブジェクト プロパティから文字列 green / red がビューに渡され、ngClass を使用して CSS によって装飾されます。

ここで私の質問があります。「エントリ」がいつ定義されるかわからないので、未定義の場合はハンドラーをチェックインします。エントリが満たされると、コンポーネントのように見えます(変更検出により) ハンドラーを魔法のように再チェックします。私はそれで大丈夫ですが、コンポーネントのプロパティがいつ変更されたかを確認するより良い方法はありませんか? @resolved またはライフサイクル フックを使用してプロパティを装飾する可能性があります..? 自分のやり方が気に入らない!

あなたの何人かがいくつかの指針を与えることができることを願っています。前もって感謝します!

PS: モデル プロパティとのバインディングはテンプレート自体で行うことができますが、ハンドラーを使用したいのは、将来特定の日をどのように装飾するかについてより柔軟になるからです。

0 投票する
0 に答える
527 参照

typescript - 動的に作成されたコンポーネントを破棄すると、変更検出エラーがスローされる

モーダル ウィンドウに挿入された動的に作成されたコンポーネントを破棄しようとしています。コンポーネントコードは

このサービスを介して表示されるモーダルウィンドウ

このサービスは、使用するコンポーネントのタイプと、入力および出力プロパティをコンポーネント参照 (本体プロパティ) にアタッチするためのコールバックを指定する親コンポーネントによって呼び出されます。

私が抱えている問題は、動的に作成されたコンポーネント (FieldEditorComponent) を破棄しようとすると、次のエラーが発生することです。

ご覧のとおり、FieldEditor でサブスクリプションをクリアしようとしました。また、最初に、破棄されている ComponentRef で使用可能な ChangeDetectorRef をデタッチしました。FieldEditor の ChangeDetectionStrategy を OnPush に変更しても効果はありませんでした。また、コンポーネントの破棄、null への参照の設定、およびモーダルの可視性の削除について、あらゆる種類の setTimeouts を試しました。

モーダル コンポーネント自体は、html を保持して modalBody ViewContainerRef を取得するためだけに存在し、modalService の visible プロパティは「display: none;」を介して機能します。*ngIf 経由の代わりに。

0 投票する
1 に答える
496 参照

javascript - Angular 2 でストリームの検出を変更しますか?

コンポーネントでストリームが読み取られている間、変数を割り当てることができません。

基本的に、this.filePath が割り当てられることはありません。ビューに表示されることはありません。ただし、console.log は常に機能します。

ある種の変更検出を使用しますか (NgZone に比べて高速であると想定されているため、changedetectionref など)? これはストリームなので、すべてを一度に取得できますか? 非同期ストリームですか?データを変数に書き込むために呼び出す必要がある fs モジュールのプロパティはありますか? fs モジュールのパイプ関数は、ファイルまたは他のストリームへの書き込みを意図しているようです。

0 投票する
1 に答える
94 参照

angularjs - Angular2はクリック後にchangeDetectionを起動しません

ChangeDetectionAngular2 は、クリック イベントの後をトリガーしません。以下のコード スニペットは、あるコンポーネントから別のコンポーネントにデータを取得するためのものです。

onClickEvent

アパートの概要コンポーネント

アパートサービス

ApartmentDetailComponent

HTMLファイル内

また、イベントエミッターを使用してこの問題を修正しようとしましたが、成功しませんでした。次のダーティ フィックスのみが機能します。

0 投票する
1 に答える
167 参照

angular - Ember.Computed('Prop1','Prop2'...'prop n') に相当する Angular 2

Ember アプリケーションを Angular 2 に移植しようとしていますが、Angular 2 で作成する方法がわかりませんでした
Computed Properties--Properties observing other properties for changes and the reacting

それ自身と反応への変化を観察します。

ヘルプ/指示は素晴らしいでしょう。

アップデート :

@Nazim からの回答を使用して解決しました typescript プロパティを使用しました

TS (コンポーネント.ts)

テンプレート (component.html)

0 投票する
1 に答える
1657 参照

typescript - angular2 で挿入されたサービスのプロパティの変更検出

ここでは Angular1 のベテランで、angular2 を学ぼうとしています。MyStateそれ自体とそのサブコンポーネントに注入される状態サービス (以下) を持つコンポーネントがあります。次のように、サービスの状態の変化を監視してから、最上位コンポーネントの別のメンバーを更新したいと考えています。

私の質問は、ListComponent コンストラクターで疑似コードをどのように実装すればよいですか?

確かに、メンバーは工夫されており、確かにテンプレート自体で行うことができますが、私の質問のために、の別のメンバーを更新するより複雑なことを行うことができるaddItemsStringと仮定します.updateAddedItemsStringListComponent

前もって感謝します!

0 投票する
2 に答える
4649 参照

javascript - Angular 2:イベントが発生しない

ユーザーがログインしているときにのみナビゲーションバーを表示したいので、コンポーネントがサービスからログに記録されたユーザーを取得したときにイベントを発生させようとしています。

ここに私の app.component コードがあります:


そして、これは関連するテンプレートです:


私のイベントが発生しない理由を誰かが知っていますか?

最初は問題は*ngIfイベントの発生を妨げていたディレクティブだと思っていましたが、それを削除してもイベントは発生しません...