Angularjs автоматически добавил проблему с областью действия директивы

#angularjs #angularjs-directive #angularjs-scope

#angularjs #angularjs-директива #angularjs-scope

Вопрос:

У меня есть работающий пример здесь,

Каталог Angularjs Circle

У меня есть каталог, который добавляется динамически при нажатии кнопки. После добавления каталога circle я увеличиваю счетчик внутри каталога circle. Но проблема здесь в том, что все каталоги обновляются с одинаковым значением, что неверно.

пожалуйста, дайте мне знать, как я могу увеличить счетчик каждого каталога по отдельности.

Комментарии:

1. Я не уверен, к чему вы здесь клоните, но вы используете count и counter непоследовательно. Это объясняет большинство ошибок, которые я вижу. Вы просите изолировать область действия директивы?

Ответ №1:

Plunkr

Хорошо, вы немного знаете в целом о JavaScript, но существует целая культура того, как Angular подойдет к этому.

Ваша основная проблема заключается в том, что вы динамически добавляете элемент за пределами Angular и его данных, когда семантически вы просто пытаетесь добавлять и удалять количество кругов на экране. Для этого вы можете использовать ng-repeat circel директиву on. Просто.

Несколько связанных исправлений

  • Вместо $(document).ready({ //running bindings }) этого попробуйте использовать ng-click или связанные угловые директивы
  • Рассмотрите возможность сохранения отступов в чистоте
  • Вы можете использовать Angular $index вместо увеличения переменной области действия окна
  • Семантически функции scope.add и scope.remove не являются свойствами круга, они являются кнопками управления за пределами круга. Попробуйте переместить их в область действия контроллера, нет, не в контроллер директив, а в контроллер приложения.
  • В любое время, когда вы хотите, чтобы каждая единица директивы имела свою собственную область действия, объявите { scope: true } в возвращаемом объекте директивы или посмотрите на индивидуальное объявление каждого свойства области действия, например { scope: { myProp: '=' } }
  • При добавлении и удалении: угловой способ очень, очень редко добавляет / добавляет элементы, как вы делаете, смешивая jQuery с Angular; вместо ng-repeat этого он позаботится о добавлении / удалении элементов DOM, которые также подчиняются методам «единого источника истины».
  • Я думаю, вы имеете в виду «Директиву», а не «Каталог»

Комментарии:

1. Я не понял этого: «Ваша главная проблема заключается в том, что вы динамически добавляете элемент за пределами Angular и его данных». При добавлении я использую angularjs $compile. это означает, что директива преобразуется в angularjs, так что это только область действия angularjs, верно?

2. Да, $compile выполняет поиск директив в элементах DOM. Но добавление / вычитание DOM обычно не обрабатывается за пределами Angular, потому что элементы DOM должны быть непосредственно репрезентативными для данных внутри контроллера Angular. Добавляя новые элементы DOM с помощью jQuery (или vanilla JS), вы добавляете новые элементы DOM за пределами угловых данных. Это не соответствует шаблонам единого источника истины .