无法使用ng-model

时间:2016-03-23 12:19:49

标签: angularjs forms angularjs-scope angular-ngmodel

所以我在同一个控制器中有两个表单。

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

和另一种形式

<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> 

检查密码是否匹配我有这个指令

  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);
          });
        });
      }
    }
  }]); 

所以我的第一张表格很好。

在我的第二种形式,密码,我无法从字段中获取密码将它们发送到服务器。我做了

 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为空。

我在这里缺少什么?是否在同一个控制器内有两种形式?这个指令会搞砸了吗?

请帮我解决这个问题。

由于

1 个答案:

答案 0 :(得分:1)

我看到了几个问题。首先,您在此处指定的函数名称:

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

与控制器中的名称不匹配:

$scope.changepassword = function(form){

其次,在提交函数之外创建passData对象。这意味着当控制器首次加载时,它将具有范围变量的值,可能是undefined。在您的函数内移动passData的创建,然后使用范围变量的当前值创建它。