Saya perlu memeriksa apakah formulir valid di pengontrol.
Melihat:
<form novalidate=""
name="createBusinessForm"
ng-submit="setBusinessInformation()"
class="css-form">
<!-- fields -->
</form>
Di pengontrol saya:
.controller(
'BusinessCtrl',
function ($scope, $http, $location, Business, BusinessService,
UserService, Photo)
{
if ($scope.createBusinessForm.$valid) {
$scope.informationStatus = true;
}
...
Saya mendapatkan kesalahan ini:
TypeError: Cannot read property '$valid' of undefined
BusinessCtrl
? tidak tahu tanpa melihat lebih banyakJawaban:
Coba ini
dalam penglihatan:
<form name="formName" ng-submit="submitForm(formName)"> <!-- fields --> </form>
dalam pengontrol:
$scope.submitForm = function(form){ if(form.$valid) { // Code here if valid } };
atau
dalam penglihatan:
<form name="formName" ng-submit="submitForm(formName.$valid)"> <!-- fields --> </form>
dalam pengontrol:
$scope.submitForm = function(formValid){ if(formValid) { // Code here if valid } };
sumber
$scope.formName.$valid
hasilnya tidak terdefinisi?formName.$valid
dapat diakses di template, jika Anda ingin mengakses di kontroler, Anda perlu membuat objek seperti itu$scope.forms.formName
dan di template:<form name="forms.formName">
periksa komentar iniSaya telah memperbarui pengontrol ke:
.controller('BusinessCtrl', function ($scope, $http, $location, Business, BusinessService, UserService, Photo) { $scope.$watch('createBusinessForm.$valid', function(newVal) { //$scope.valid = newVal; $scope.informationStatus = true; }); ...
sumber
vm
pendekatan. Anda dapat membuat plunker untuk jawaban yang sama dengan menggunakan pengontrol sebagai pendekatan sintaks. Saya tidak bisa melakukannya Ini akan membantu orang lain juga yang mencari jawaban dengan konteks hari ini. Terima kasihIni solusi lainnya
Tetapkan variabel lingkup tersembunyi di html Anda, lalu Anda dapat menggunakannya dari pengontrol Anda:
<span style="display:none" >{{ formValid = myForm.$valid}}</span>
Berikut adalah contoh kerja lengkapnya:
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); }; });
<!doctype html> <html ng-app="App"> <head> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.1/angular.min.js"></script> </head> <body> <form name="myForm" ng-controller="myController"> userType: <input name="input" ng-model="userType" required> <span class="error" ng-show="myForm.input.$error.required">Required!</span><br> <tt>userType = {{userType}}</tt><br> <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br> <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br> <tt>myForm.$valid = {{myForm.$valid}}</tt><br> <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br> /*-- Hidden Variable formValid to use in your controller --*/ <span style="display:none" >{{ formValid = myForm.$valid}}</span> <br/> <button ng-click="isFormValid()">Check Valid</button> </form> </body> </html>
sumber
Ini
BusinessCtrl
dimulai sebelumcreateBusinessForm
'sFormController
. Bahkan jika Anda memilikingController
formulir tidak akan bekerja seperti yang Anda inginkan. Anda tidak dapat membantu ini (Anda dapat membuat filengControllerDirective
, dan mencoba mengelabui prioritas.) Ini adalah cara kerja angularjs.Lihat plnkr ini misalnya: http://plnkr.co/edit/WYyu3raWQHkJ7XQzpDtY?p=preview
sumber