2017-07-27 61 views
1

我的代碼的情景: 我有角2應用程序,它具有,從多個領域,一個輸入字段(查找),這將打開一個彈出式窗口十年的舊網址(使用window.open())得到一些查找數據。並且它從父頁面的window對象回調函數。將常規JavaScript變量附加到Angular 2模型(輸入)?

的功能在index.html頁角2應用程序的定義是這樣的:

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

需要: 變量value現在有被捆綁/綁定到名爲inputModel輸入的模式。有什麼辦法可以實現這一點?

請注意:我知道這不是<script>標籤的好習慣,一切都必須基於組件。但它如何收到我的任務:-P

謝謝!

+0

你不能。唯一的方法是在腳本標記中更改代碼:'函數處理程序(res){window.value = res;}'。 – n00dl3

+0

n00dl3:這不會更新輸入模型。將其更改爲「window.value」將使其對窗口對象可見。 – pk10

+0

如果您想要從某處訪問該變量,則必須使其成爲全局變量。期。 – n00dl3

回答

0

您可以將窗口對象這樣的值存儲:window['value'] = res;

現在,您可以訪問的res價值的角度成分中像這樣window['value']

但是,現在的問題是,這將僅當角度分量從window對象讀取value時調用handler才起作用。您的角度組件將不會被通知任何後續處理程序調用,該更新會更新window對象中的value屬性。

因此,您需要一個全局處理函數的機制來通知您的角度組件窗口對象上的value屬性已更新。

這是從外部的角度與角度分量溝通的一種方式:

  1. 內,您的角度成分的模板,創建一個隱藏的input
  2. 附上(click)處理了這一點。
  3. 在您的全局handler函數中,使用document.getElementById('hidden input's id').click()來模擬點擊。
  4. 現在,您在步驟2中創建的(click)處理程序將處於angular的上下文中,該處理程序將被調用。
  5. 現在,每次調用全局函數handler時,角度上下文中的(click)處理程序都將被調用,基本上會告訴角度以從window對象獲取更新值。

這裏是一個working Plunker

在這種plunker,我已經把它貼在全球處理函數的htmlonclick處理它超出角的模擬您的要求的上下文。這個點擊事件將通過我上面提到的方法傳遞給角度組件。

+0

感謝CodeWarrior,這有很大的幫助。 – pk10