2016-10-21 8 views
0

私は、学習目的で電子商取引サイトを開発しています。コントローラからng-modelにアクセスできない[AngularJS]

HTML:

<div class="container"> 
    <form class="log-in-form" ng-controller="ControllerLogin"> 
     <div class="form-group"> 
      <label for="loginEmail">Email address</label> 
      <input type="email" class="form-control" id="loginEmail" placeholder="Email" ng-model="email"> 
     </div> 
     <div class="form-group"> 
      <label for="loginPass">Password</label> 
      <input type="password" class="form-control" id="loginPass" placeholder="Password" ng-model="password"> 
     </div> 
     <button class="btn btn-default" ng-click="authenticate()">Login</button> 
    </form> 
</div> 

角度のjavascript

app.controller('ControllerLogin', ['$scope', '$http', 'ServiceLogin', function ($scope, $http, ServiceLogin) { 
     $scope.authenticate = function() { 
      console.log($scope.email); 
      ServiceLogin.auth($scope.email, $scope.password) 
         .success(function (data) { 
          alert(data); 
         }); 
     } 
}]); 

私は$のscope.email、またはパスワードをCONSOLE.LOGたびに。それは未定義のエラーを投げます。私はちょうど角度を開始していると私はなぜモデルを取得していないか分からない、私は自分のコードが正しいと思う。あなたが与えることができるどんな助けでも私は感謝しています。ブラウザのネイティブフォームの検証を無効にするために使用されNOVALIDATE

注:アンギュラサイトから

+0

hmm..有効なメールが送信されるまでは設定されていません。入力を 'text'に変更すると、実際の電子メールを入力するか動作します。私はフォームに 'novalidate'を置こうとしましたが、それは何もしませんでした。 – Ronnie

+0

私が知る限り、 '$ scope.email'と' $ scope.password'はフォームフィールドがそれらの値を設定するまでは未定義です。起こっているように見えるのは、ページのコントローラが読み込まれると、 '$ scope.email'と' $ scope.password'の両方が初期化されておらず、したがって未定義であるということです。それらを空の文字列に初期化することができます。 ($ scope.email = '' ";' $ scope.password = "") – frishi

+0

これは無効な電子メールの問題でした。 'type = submit' attr。ありがとうございました! –

答えて

0

ngModelの値は、入力フィールドの検証をパスしないかぎり設定されません。たとえば、電子メールタイプの入力には、user @ domainという形式の値が必要です。

参考:https://docs.angularjs.org/guide/forms

だから、それは空白のかもしれ理由は、それが有効なメールではないということです。

デモでメールの種類を確認し、実際に使用することができます。

私が追加することをお勧めします:コントローラのHTMLスコープ内のあなたのHTML内のどこかに

{{email}} 
<br> 
{{password}} 

を独自のデバッグ用。

幸運。

+0

ありがとう!とても助かりました!!! –

関連する問題