AngularJS проверяет, действительна ли форма в controllerе
Мне нужно проверить, действительна ли форма в controllerе.
Посмотреть:
В моем controllerе:
- Угловая ng-repeat добавляет бутстрап-строку каждые 3 или 4 столбца
- Как обновить / недействить кеш ресурсов $ в AngularJS
- ионное приложение не может подключить сервер с поддержкой cors с помощью $ http
- ng-model для `` (с директивой DEMO)
- Единичное тестирование Директива AngularJS с шаблономUrl
.controller( 'BusinessCtrl', function ($scope, $http, $location, Business, BusinessService, UserService, Photo) { if ($scope.createBusinessForm.$valid) { $scope.informationStatus = true; } ...
Я получаю эту ошибку:
TypeError: Cannot read property '$valid' of undefined
- Сбросить форму в нетронутое состояние (AngularJS 1.0.x)
- Как использовать ng-repeat без элемента html
- В чем смысл запроса: «ngModel»?
- Не удается добраться до $ rootScope
- Как вы используете $ sce.trustAsHtml (string) для репликации ng-bind-html-unsafe в Angular 1.2+
- Формат Время в формате AngularJS
- если путь ngSrc разрешается до 404, существует ли способ отступить к умолчанию?
- Обновить значение области действия при изменении данных службы
Попробуй это
ввиду:
в controllerе:
$scope.submitForm = function(form){ if(form.$valid) { // Code here if valid } };
или
ввиду:
в controllerе:
$scope.submitForm = function(formValid){ if(formValid) { // Code here if valid } };
Я обновил controller до:
.controller('BusinessCtrl', function ($scope, $http, $location, Business, BusinessService, UserService, Photo) { $scope.$watch('createBusinessForm.$valid', function(newVal) { //$scope.valid = newVal; $scope.informationStatus = true; }); ...
Вот еще одно решение
Установите скрытую переменную области видимости в свой html, затем вы можете использовать ее с вашего controllerа:
Вот полный рабочий пример:
angular.module('App', []) .controller('myController', function($scope) { $scope.userType = 'guest'; $scope.formValid = false; console.info('Ctrl init, no form.'); $scope.$watch('myForm', function() { console.info('myForm watch'); console.log($scope.formValid); }); $scope.isFormValid = function() { //test the new scope variable console.log('form valid?: ', $scope.formValid); }; });
BusinessCtrl
инициализируется до createBusinessForm
FormController
. Даже если у вас есть ngController
в форме, вы не будете работать так, как хотите. Вы не можете помочь этому (вы можете создать свой ngControllerDirective
и попытаться обмануть приоритет.) Вот как работает angularjs.
См. Этот plnkr, например: http://plnkr.co/edit/WYyu3raWQHkJ7XQzpDtY?p=preview