«Это» конфликтует в angular и Jquery

#jquery #angular #angularjs

#jquery #angular #angularjs

Вопрос:

Я пытаюсь перенести приложение angularjs в angular. В старом приложении были функционалы jquery. Я попытался использовать то же самое. Проблема с элементом «this».

При загрузке в angular angular принимает «этот» элемент, имеющий первый компонент, а элемент jquery «this» не отображается.

введите описание изображения здесь

Ценю любую помощь!!!

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

1. В Angular вы вообще не должны использовать jquery. Angular имеет свои собственные способы выбора элементов и управления DOM. Для вашего конкретного варианта использования вы можете либо просто использовать [ngClass] в своем шаблоне, чтобы применить нужные вам стили, либо вы можете использовать класс Renderer2 . angular.io/api/core/Renderer2

2. @MichaelRentmeister — Я согласен, что использование jquery в angular нежелательно. Как я уже говорил, я переношу проект angularjs, где все написано в jquery. Я хотел использовать то же самое. Я попытался вызвать jquery dom в ngoninit, и он работает так, как ожидалось. Просто этот оператор «this» является общим для angular и jquery. Это путается. Есть идеи по этому поводу??

3. Я понимаю, что вы его конвертируете, но если вы собираетесь его конвертировать, вам следует сделать это поддерживаемым Angular способом. Вы столкнетесь со многими другими проблемами, если пойдете по пути, которому следуете.

4. проблема заключается в функции стрелки в сочетании с этим. поэтому используйте e.target

Ответ №1:

Просто замените свою функцию стрелки на click by function .

использование this внутри тела функций со стрелками не создаст новый лексический контекст, отсюда и ваш результат.

Внутри методов jQuery, таких как click, вам необходимо использовать выражения функций, которые позволят привязать лексический контекст this к текущему элементу dom.

Важно прочитать о this , http://perfectionkills.com/know-thy-reference , информация о функциях стрелок и их подводных камнях также может быть полезна.

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

1. Это правильный ответ, каламбур. Тем не менее, я по-прежнему настоятельно рекомендую не использовать jquery.