Загрязнение страницы формы AngularJS с помощью JavaScript

Я хочу сделать поле формы AngularJS грязным, используя код JavaScript,

Вот HTML-код

<!DOCTYPE html>
<html>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>

<body ng-app = "">

  <p>Try writing in the input field:</p>

  <form name = "myForm">
    <input name = "myInput" ng-model = "myInput" required>
  </form>

  <p>The input's valid state is:</p>
  <h1>{{myForm.myInput.$valid}}</h1>

</body>

</html>

Я пробовал использовать

document.querySelector('input[name = "myInput"]').value = "123",

щелчок, фокусировка, но ни один из них не работает / не отменяет. Пожалуйста, расскажите мне, как это сделать без, используя функции AngularJS и простой JavaScript.

Я хочу изменить действительное состояние ввода на true

AngularJS - это JavaScript, и у него есть метод .$setDirty(), который вы можете использовать в контроллере.

Aleksey Solovey 04.06.2018 12:28

мне нужно взаимодействовать с приложением angular, не меняя код в angular, например, через хромированную консоль

Jithin P 04.06.2018 12:31

Вы можете использовать jQLite (jQuery) в своей консоли как angular.element(document) и добавить к нему некоторые другие функции, такие как .find(), для выбора формы. Посмотрите эти функции здесь: angular.element

Aleksey Solovey 04.06.2018 12:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
187
2

Ответы 2

Для взаимодействия с приложением angular с консоли вам необходимо использовать

var scope = angular.element(document.getElementById('yourElementId')).scope();

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

scope.myForm.myInput.$setViewValue(scope.myForm.myInput.$viewValue);

он не будет работать в производственной версии angular, мне нужно сделать это с помощью javascript с консоли

Jithin P 04.06.2018 12:42

что вы имеете в виду, что он не будет работать в продакшене? :) .. приведенный выше код также будет нормально работать в консоли .. если мне что-то не хватает

Hany Habib 04.06.2018 12:44

когда файл angular отображается на сервере, в настоящее время я получаю Uncaught ReferenceError: angular не определен, когда я использовал Augury (Angular Inspector), он показывал, что приложение angular работает в производственном режиме

Jithin P 04.06.2018 12:51

@HanyHabib Метод .scope() требует включения Данные отладки. Для получения дополнительной информации см. Справочник по API AngularJS angular.element - Дополнительные методы jQuery / jqLite.

georgeawg 04.06.2018 13:39

Использовать:

   var $body = angular.element(document.body);
   var $scope = $body.data().$scope;
   $scope.myForm.myInput.$setDirty();
   $scope.$apply();

ДЕМО

setTimeout(function() {
   var $body = angular.element(document.body);
   var $scope = $body.data().$scope;
   $scope.myForm.myInput.$setDirty();
   $scope.$apply();
}, 1000);
<!DOCTYPE html>
<html>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>

<body ng-app = "">

  <p>Watch dirty state flash from false to true</p>

  <form name = "myForm">
    <input name = "myInput" ng-model = "myInput" required>
  </form>

  <p>The input dirty state is:</p>
  <h1>{{myForm.myInput.$dirty}}</h1>

</body>

</html>

Я хочу сделать то же самое с производственной версией angular, но angular.functions не будут работать с ними

Jithin P 05.06.2018 14:02

Я протестировал этот код с производственной версией AngularJS, и он работает.

georgeawg 05.06.2018 14:07

Есть ли другой способ без использования кода angular.fns, сайт, который я использую, не понимает код angular.fns, возможно, они используют рендеринг на стороне сервера

Jithin P 05.06.2018 16:09

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