Правильный способ доступа к функции в области видимости

0

Я использую пользовательские модули, которые я пытаюсь не редактировать, чтобы обновления были приятными и легкими.

Я пытаюсь разрешить пользователю просматривать файл CSV в локальной файловой системе, анализировать его и отображать в динамической таблице. Для этого я использую PapaParse, ui.grid и angularFileUpload.

Проблема, с которой я сталкиваюсь, заключается в том, что все они работают на разных уровнях иерархии.

angularFileUpload - это легко - он вызывает функцию в моем контроллере (используя синтаксис controllerAs). Затем эта функция запускает функцию PapaParse для преобразования CSV файла в объект JSON (все работает до сих пор).

Проблема заключается в том, что ui.grid работает с объектом $ scope, поскольку он является директивой атрибута и не поддерживает наблюдателей для мониторинга изменений в переменной (вам нужно вызвать функцию обновления данных для повторной привязки данных),

Поэтому вопрос заключается в том, что внутри моего контроллера правильный/рекомендуемый способ связи с внешней директивой без редактирования директивы для прослушивания сообщений.

Теги:
angularjs-scope

1 ответ

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

ui.grid должен связываться с изменениями связанных с ним данных. Поэтому вы должны изменить только локальный масштаб $, к которому привязана сетка, и все работает нормально.

Как вы упомянули, директивы не слушают сообщения, но это также не то, как работает Angular. Угловые силы привязки данных, поэтому, привязывая поле к директиве, компонент должен позаботиться о обновлении своего представления, как только вы измените модель, с которой вы ее связали.

К сожалению, ui.grid не придерживается этого соглашения. Поэтому вы должны отображать сетку, как только пользовательские данные есть (внутри функции, вызываемой после открытия файла или через $watch). Это можно сделать, например, через ngIf, где ngIf директива загружается только тогда, когда поле истинно. Когда пользователь переключается между двумя CSV, вы можете установить значение false, загрузить данные в своей модели и снова установить его в true. Убедитесь, что между часами есть один цикл дайджеста (например, через $timeout), чтобы ваше изменение повлияло на пользовательский интерфейс.

  • 0
    Похоже, он не слушает изменения: \ ui-grid.info/docs/#/tutorial/316_dynamic_data_changes
  • 0
    Плохо. Возможно, условный рендеринг может вам помочь. По сути, если вы выбрали другой CSV, вам всегда нужно перерисовывать всю вещь полностью, так что это не противоречит мышлению ui.grid если вы делаете это.
Показать ещё 2 комментария

Ещё вопросы

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