2016-03-28 15 views
0

Bir sayfada oturum açma formum var, giriş fonksiyonunu yönetmek için kendi kontrolörüne sahip, ancak bir sebepten ötürü formun sunulması üzerine oturum açma fonksiyonu tetiklenmiyor.Div'e atanmamış kontrolörde AngularJS metodu

daha büyük bir görünüşüdür dosya içinde formu:

<div class="login-wrap" ng-controller="LoginCtrl as logincontrol"> 

     <form ng-class="{submited: submited}" class="form-login" novalidate name="loginForm" x-ng-submit="logincontrol.login()"> 

      <div class="form-group" ng-class="{errorEmail: loginForm.email.$error.required || loginForm.email.$error.email}"> 
       <input type="email" name="email" id="email" class="form-control login-form-input" placeholder="{{'Email' | translate}}" x-ng-model="username" required> 
      </div> 

      <div class="form-group" ng-class="{errorPassword: loginForm.password.$error.required}"> 
       <input type="password" id="password" name="password" class="form-control login-form-input" placeholder="{{'Password' | translate}}" x-ng-model="password" required> 
      </div> 

      <div class="text-center"> 
       <button class="btn btn-success login-button" type="submit" translate>SIGN IN</button> 
      </div> 

     </form> 

</div> 

giriş kontrolü:

angular.module('services.security') 
    .controller('LoginCtrl', function ($scope, securityService, $rootScope) { 
     $scope.messages = { 
      error: false 
     }; 

     console.log("HERE"); 

     $scope.submited = false; 

     $scope.loading = false; 

     var validateEmail = function(email) { 
      var pattern = /^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 

      return email.match(pattern); 
     }; 

     $scope.login = function() { 
      console.log("clicked"); 

      $scope.submited = true; 

      if (!$scope.loginForm.email.$viewValue) { 
       $scope.loginForm.email.$dirty = true; 
       $scope.loginForm.email.$invalid = true; 
       $scope.loginForm.email.$error.required = true; 
      } 

      if (!$scope.loginForm.password.$viewValue) { 
       $scope.loginForm.password.$dirty = true; 
       $scope.loginForm.password.$invalid = true; 
       $scope.loginForm.password.$error.required = true; 
      } 

      if (validateEmail($scope.loginForm.email.$viewValue)) { 
       if ($scope.loginForm.$valid) { 
        $scope.messages.error = false; 
        $scope.loading = true; 

        securityService.login($scope.loginForm.email.$viewValue, $scope.loginForm.password.$viewValue).then(function() { 
         $scope.loading = false; 
        }, function(data) { 
         console.log(data) 
         $scope.loading = false;; 
        }); 
       } 
      } else { 

       if ($scope.loginForm.email.$viewValue){ 
        $scope.loginForm.email.$dirty = true; 
        $scope.loginForm.email.$invalid = true; 
        $scope.loginForm.email.$error.email = true; 
       } 
      } 

     }; 
    }); 
giriş görünüşüdür konsolunda basılır HERE yüklenir

, bu nedenle kontrol yĂźkleniyor Ancak, form gönderildiğinde giriş işlevi tetiklenmez (yani clicked yazdırılmaz).

cevap

0

HTML kodunuzda LoginCtrl as logincontrol belirterek bir örnek oluşturuyorsunuz.

Eğer $scope değişkenle kullanmak isterseniz sadece ng-controller="LoginCtrl"

veya

diyor ki onların documentation içinde this

Eğik tanımlayıp buna $scope değiştirin belirtmek aşağıdaki gibi:

Aşağıda iki farklı bildirim stili bulunur:

  • bir this kullanılarak kontrolör doğrudan yöntem ve özellikleri bağlanır: ng-controller="SettingsController2"
: ng-controller="SettingsController1 as settings"
  • bir kontrol cihazına $scope enjekte