AngularJS: Является ли ng-click "хорошей практикой"? Почему в AngularJS нет ng- {события}?

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

  1. Я это понимаю ng-click технически не совпадает с onclick (см. здесь), но оба размещены в разметке. Я думал, что это будет "плохой практикой"? Почему это одна из основных концепций AngularJS, если большинство людей говорят, что это "плохо"? Я подумал, что будет лучше выбрать элемент DOM из JavaScript, а не размещать логику в разметке.

  2. Если ng-click правильно реагировать на события кликов в AngularJS, что мне делать с другими событиями DOM? Я вижу, что есть несколько других директив, таких как ng-mouseover, но не все события DOM имеют эквивалент AngularJS. Как бы я обработал событие drop в AngularJS (следовательно, в AngularJS - не обычным способом)? Чтобы было ясно: я хочу перетащить файл в мое веб-приложение.

Большое спасибо, Пипо

2 ответа

Решение

Почему это одна из основных концепций AngularJS, если большинство людей говорят, что это "плохо"?

Ну, люди, которым действительно нравится ненавязчивый JavaScript, могут сказать, что это плохо. Англичане (и те, у кого гибкий фон) видят ценность в более декларативном подходе.

"Angular основан на убеждении, что декларативный код лучше, чем императив, когда речь идет о совместной разработке интерфейсов и программных компонентов... Благодаря декларативному описанию того, как интерфейс должен меняться при изменении состояния вашего приложения, вы освобождаетесь от низкоуровневой манипуляции с DOM задачи. - Обзор документа

См. Также Не противоречат ли параметры атрибутов данных, используемые в Bootstrap, Angular.js и Ember.js, ненавязчивым принципам Javascript?

что мне делать с другими событиями DOM?

Напишите свои собственные директивы, чтобы выслушать их (или найдите ту, которую уже написал кто-то другой). Angular дает вам возможность расширить возможности браузера - написав свои собственные директивы.

Обновление: в комментариях ниже Тим Стюарт упоминает ui-событие AngularUI, которое позволяет привязать обратный вызов к любому событию, изначально не поддерживаемому Angular.

По своей природе Angular требует элементы в разметке для правильного функционирования. Кроме того, эти элементы должны быть "скомпилированы" каждый раз, когда они меняются, по большей части. Таким образом, это уже несколько "навязчиво" независимо от JavaScript. Вы не можете просто заменить разметку, и у вас есть все, что вам нужно, с помощью jQuery.

Строго говоря, ненавязчивый JavaScript: 1. Разделяет структуру и поведение, чтобы сделать ваш код чище и проще в обслуживании скриптов 2. Предотвращает несовместимость браузера 3. Работает с чистым, семантическим HTML-слоем ( Википедия)

Это не Angular, конечно. Чтобы добиться двусторонней привязки для всего, они решили создать собственные точки привязки в DOM, а не использовать имя класса или идентификатор, как это делает jQuery. (Несколько нестандартный подход, но он, очевидно, работает.)

Но реальный способ думать об этом заключается в следующем: в основном каждый контролируемый раздел вашей разметки в действительности больше не является простым HTML. Сейчас это действительно больше шаблон, и поэтому требуется взаимодействие с движком, который готовит его к визуализации. Таким образом, традиционные правила ненавязчивости на самом деле не применяются... (FWIW, я большой поклонник / пользователь функции jQuery.on(), которая автоматически связывает элементы с событиями, когда элемент добавляется на страницу. Очень чистый и гибкий, ИМХО, и мне бы хотелось, чтобы в Angular был похожий механизм. Мне нравится добавлять класс к элементам в нескольких местах на странице, которые автоматически вызывают один и тот же обработчик событий. хорошая вещь. но я отвлекся...)

Для меня большая проблема - это прогрессивный дизайн. Работает ли веб-страница вообще без JavaScript? Кто-нибудь действительно заботится об этом? Хммм...

Другие вопросы по тегам