2013-06-01 3 views
1

Я работаю над проектом с AngularJS, где у меня проблема с 2 областями, конфликтующими: - У меня есть контроллеры, определяющие области действия в разных местах моего DOM (отлично работает) - Я просто добавил три директивы для реализации функции подсказки «help», так же как и chardin.js-плагин в jQuery (http://heelhook.github.io/chardin.js/): одна главная директива, позволяющая запускать их сразу, одну «дочернюю» директиву на кнопке триггера и одну директива 'child', используемая для обозначения каждого элемента DOM, на котором я хочу всплывающую подсказку.AngularJS: область действия, противоречащая области контроллеров

Когда у меня есть только эти 3 директивы, он прекрасно работает, но когда я реализую свои контроллеры и мои директивы в то же время, я не могу использовать свои контроллеры больше (объем, кажется, укомплектовать неправильно ...)

структура у меня есть что-то вроде этого:

  • HTML -> главный контроллер
  • 4 секции -> 4 контроллеры

и добавляю ed 1 на корпусе (основной), 1 директива на кнопку где-то и 1 директива по различным элементам из 4 разделов ...

Я знаю, что мои объяснения смущены, но я действительно сделал свое лучше всего для моего первого сообщения здесь!

Если вы хотите увидеть в коде я написал для моих директив, здесь: http://plnkr.co/edit/GrwgkH?p=preview

Большое спасибо за вашу помощь

С.

ответ

1

Попробуйте обертывание модели области видимости вашего контроллера в каком-то объекте. Примитивные значения (например, number, string, boolean) скрыты в дочерних областях по собственному свойству с тем же именем.

Подробнее о Understanding Scopes на англ. Языке AngularJS github wiki.

+0

Я прочитал все документы на угловом веб-сайте, и я просмотрел код на github, но я не думал о вики! спасибо за эту идею! –

+0

И на данный момент у меня есть 2 решения: забыть о директивах и использовать службу, в которой я использую angular.element.find с тестом на атрибуты для восстановления jQuery-плагина без jquery (он отлично работает, но мне не нравится тестировать все элементы dom, чтобы проверить их атрибуты ..) Вторая идея, которую я имею, заключается в использовании директивы для заполнения массива элементов, расположенных в службе, а затем использования службы для сопоставления массива, чтобы исключить первый тест из всех элементов DOM, чтобы найти те, у которых есть мои атрибуты ... –

+0

К сожалению, мой второй вариант не работает, потому что у меня есть эта проблема: моя директива может быть всюду в dom и может иметь вложенные элементы (остальная часть html) , Но эти вложенные элементы не могут иметь доступ к исходному контроллеру, который определен выше моей директивы! –

1

У меня также возникли проблемы с примитивными значениями. Я закончил использование sugar.js и Object.extended(), чтобы создать объект $ scope.context, на котором я сохранил данные модели. Это позволило легко кэшировать данные.

+0

Спасибо за этот отзыв, я посмотрю на sugar.js –

Смежные вопросы