Присоединить обычную переменную JavaScript к модели Angular 2 (вход)?

1

Мой сценарий кода. У меня есть приложение Angular 2, в котором из нескольких полей есть одно поле ввода (для поиска), которое открывает десятичный старый URL-адрес во всплывающем окне (используя window.open()), чтобы получить некоторые данные поиска. И он вызывает функцию из window объекта родительской страницы.

Функция определена на странице index.html приложения Angular 2 следующим образом:

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

Необходимость: value переменной теперь должно быть привязано/привязано к модели ввода с именем inputModel. Есть ли способ, которым это может быть достигнуто?

Обратите внимание: я знаю, что это не очень хорошая практика наличия тегов <script>, все должно быть основано на компонентах. Но как я получил задание: -P

Спасибо!

  • 0
    ты не можешь Единственный способ - изменить код в теге скрипта: function handler(res) { window.value = res;} .
  • 0
    n00dl3: это не будет обновлять модель ввода. Изменение его на «window.value» просто сделает его видимым для объекта окна.
Показать ещё 2 комментария
Теги:
angular

1 ответ

0
Лучший ответ

Вы можете сохранить значение на объекте окна следующим образом: window['value'] = res;

Теперь вы можете получить доступ к значению res внутри ваших угловых компонентов, таких как это window['value']

Но теперь проблема заключается в том, что это будет работать, только если handler уже был вызван к тому моменту, когда угловой компонент считывает value из window объекта. Ваш угловой компонент не будет уведомлен о любых последующих вызовах обработчика, которые обновляют свойство value в объекте window.

Итак, вам нужен механизм для функции глобального обработчика, чтобы уведомить ваш угловой компонент о том, что value свойства на вашем объекте окна было обновлено.

Вот один из способов общения с вашим угловым компонентом из-за угла:

  1. Внутри шаблона углового компонента создайте скрытый input
  2. Прикрепите обработчик (click) к этому.
  3. В своей глобальной функции handler используйте document.getElementById('hidden input id').click() для имитации щелчка.
  4. Теперь обработчик (click), созданный на шаге 2, который находится внутри углового контекста, будет вызван.
  5. Теперь, всякий раз, когда вызывается глобальная функция handler вызывается handler (click) в угловом контексте, по существу говорящий угловым, чтобы получить обновленное значение из объекта window.

Вот рабочий Plunker

В этом plunker я привязал функцию глобального обработчика к html onclick обработчику, который является внешним угловым контекстом для имитации вашего требования. Это событие щелчка будет передано угловому компоненту с использованием подхода, упомянутого выше.

  • 0
    Спасибо CodeWarrior, это очень помогло.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню