#angularjs #angularjs-directive #angularjs-scope
#angularjs #angularjs-директива #angularjs-scope
Вопрос:
У меня есть работающий пример здесь,
У меня есть каталог, который добавляется динамически при нажатии кнопки. После добавления каталога circle я увеличиваю счетчик внутри каталога circle. Но проблема здесь в том, что все каталоги обновляются с одинаковым значением, что неверно.
пожалуйста, дайте мне знать, как я могу увеличить счетчик каждого каталога по отдельности.
Комментарии:
1. Я не уверен, к чему вы здесь клоните, но вы используете
count
иcounter
непоследовательно. Это объясняет большинство ошибок, которые я вижу. Вы просите изолировать область действия директивы?
Ответ №1:
Хорошо, вы немного знаете в целом о 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 за пределами угловых данных. Это не соответствует шаблонам единого источника истины .