Я хочу сделать поле формы 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
мне нужно взаимодействовать с приложением angular, не меняя код в angular, например, через хромированную консоль
Вы можете использовать jQLite (jQuery) в своей консоли как angular.element(document) и добавить к нему некоторые другие функции, такие как .find(), для выбора формы. Посмотрите эти функции здесь: angular.element



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Для взаимодействия с приложением angular с консоли вам необходимо использовать
var scope = angular.element(document.getElementById('yourElementId')).scope();
это даст вам требуемую область видимости, а затем, чтобы установить элемент как грязный, вы можете использовать
scope.myForm.myInput.$setViewValue(scope.myForm.myInput.$viewValue);
он не будет работать в производственной версии angular, мне нужно сделать это с помощью javascript с консоли
что вы имеете в виду, что он не будет работать в продакшене? :) .. приведенный выше код также будет нормально работать в консоли .. если мне что-то не хватает
когда файл angular отображается на сервере, в настоящее время я получаю Uncaught ReferenceError: angular не определен, когда я использовал Augury (Angular Inspector), он показывал, что приложение angular работает в производственном режиме
@HanyHabib Метод .scope() требует включения Данные отладки. Для получения дополнительной информации см. Справочник по API AngularJS angular.element - Дополнительные методы jQuery / jqLite.
Использовать:
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 не будут работать с ними
Я протестировал этот код с производственной версией AngularJS, и он работает.
Есть ли другой способ без использования кода angular.fns, сайт, который я использую, не понимает код angular.fns, возможно, они используют рендеринг на стороне сервера
AngularJS - это JavaScript, и у него есть метод
.$setDirty(), который вы можете использовать в контроллере.