2017-07-27 3 views
1

私のコードのシナリオ: 複数のフィールドのうち、入力フィールド(ルックアップ用)があり、ポップアップウィンドウで(window.open()を使用して)十年前のURLを開くルックアップデータを取得するAngular 2アプリケーションがあります。また、親ページのオブジェクトwindowから関数を呼び出します。通常のJavaScript変数をAngular 2モデル(入力)に添付しますか?

機能は、このような角度2アプリケーションのindex.htmlページで定義されています

<script> 
    function handler(res) { 
    var value = res; 
    } 
</script> 

必要性: 変数valueは今inputModelという名前の入力のモデルにバインド/縛られる必要があります。これが達成できる方法はありますか?

注:私はこれが<script>タグを持つ良い習慣ではないことを認識しています。すべてがコンポーネントベースでなければなりません。しかし、私はどのように私がその仕事を受けたのですか: - P

ありがとう!あなたはこのようなウィンドウオブジェクトの値を格納することができ

+0

できません。唯一の方法は、スクリプトタグのコードを変更することです: 'function handler(res){window.value = res;}'。 – n00dl3

+0

n00dl3:これは入力のモデルを更新しません。 'window.value'に変更すると、ウィンドウオブジェクトに表示されます。 – pk10

+0

どこかからその変数にアクセスできるようにするには、その変数をグローバルにする必要があります。期間。 – n00dl3

答えて

0

:今window['value'] = res;

、あなたはこのwindow['value']

のようなあなたの角度成分の内側にresの値にアクセスすることができます。しかし、問題は、今では、この意志であります角度コンポーネントがwindowオブジェクトからvalueを読み出すまでにhandlerが既に呼び出されている場合にのみ機能します。角度コンポーネントは、windowオブジェクトのvalueプロパティを更新する後続のハンドラ呼び出しの通知を受けません。

したがって、グローバルハンドラ関数が角度オブジェクトにウィンドウオブジェクトのvalueプロパティが更新されたことを通知するメカニズムが必要です()。

  1. これに(click)ハンドラをアタッチ隠しinput
  2. を作成し、あなたの角度成分のテンプレート内部:ここ

    は外の角度からあなたの角度成分との通信の一つの方法です。

  3. グローバルhandlerの機能では、document.getElementById('hidden input's id').click()を使用してクリックをシミュレートします。
  4. 今度は、ステップ2で作成した角度のコンテキスト内にある(click)ハンドラが呼び出されます。
  5. グローバルなhandler関数が呼び出されるたびに、angleのコンテキスト内の(click)ハンドラが呼び出され、実質的には角度を通知してwindowオブジェクトから更新された値を取得します。

ここでは、このplunkerでworking Plunker

ですが、私はあなたの条件をシミュレートするため、外部の角度の文脈でhtmlonclickハンドラにグローバルハンドラ関数を添付しました。このクリック事象は、上述したアプローチを使用して角度成分に伝達される。

+0

ありがとうCodeWarrior、これは多くの助けになりました。 – pk10

関連する問題