2016-03-23 8 views
1

同じコントローラの中に2つのフォームがあります。ng-modelでフォームデータを取得できません

<form name="myForm" id="myForm" class="form-horizontal" ng-submit="saveMyForm(myForm)" > 
    <input type="text" id="name" ng-model="name" />  
    //...etc 
</form> 

とパスワードが、私は

app.directive('pwCheck', [function() { 
    return { 
     require: 'ngModel', 
     link: function (scope, elem, attrs, ctrl) { 
     var firstPassword = '#' + attrs.pwCheck; 
     elem.add(firstPassword).on('keyup', function() { 
      scope.$apply(function() { 
      var v = elem.val()===$(firstPassword).val(); 
      ctrl.$setValidity('pwmatch', v); 
      }); 
     }); 
     } 
    } 
    }]); 

は、だから私の最初のフォームが正常に動作します。このディレクティブを持って一致した場合

<form name="passForm" id="passForm" ng-submit="savePassForm(passForm)" > 
    <input type="password" id="oldpassword" name="oldpassword" ng-model="oldpassword" >  
    <input type="password" id="pw1" name="pw1" ng-model="pw1" >  
    <input type="password" id="pw2" name="pw2" ng-model="pw2" pw-check="pw1" >  
</form> 

<div class="msg-block" ng-show="passForm.$error"> 
     <span class="msg-error loginError" ng-show="passForm.pw2.$error.pwmatch"> 
     Passwords don't match. 
     </span> 
</div> 

を確認するには別の形。

私の2番目のフォームでは、パスワードのために、私はフィールドにパスワードを取得してサーバーに送信できません。私は

var passData = {      
    "oldpassword" : $scope.oldpassword, 
    "newpassword" : $scope.pw2       
} 

    $scope.changepassword = function(form){       

    if(form.$valid) { 
     var promisePass = passwordFactory.changePass(passData); 
     promisePass.success(function (data, status) { 
     //handle 

を行い、私は私のコンソールをチェックすると、データがない、passDataは空です。

私はここで何が欠けていますか?同じコントローラー内に2つのフォームがあることは事実ですか?指示は物事を混乱させるか?

これを解決してください。

ありがとうございました

答えて

1

私はカップルの問題を参照してください。

<form name="passForm" id="passForm" ng-submit="savePassForm(passForm)" > 

があなたのコントローラ内の名前と一致しません:

$scope.changepassword = function(form){ 

第二に、あなたは送信関数の外であなたのpassDataオブジェクトを作成するには、ここで指定しているまず、関数名。つまり、コントローラーが最初にロードされたときの有効範囲変数の値は、undefinedとなります。関数内にpassDataの作成を移動すると、スコープ変数の現在の値で作成されます。

関連する問題