所以我在同一个控制器中有两个表单。
<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
为空。
我在这里缺少什么?是否在同一个控制器内有两种形式?这个指令会搞砸了吗?
请帮我解决这个问题。
由于
答案 0 :(得分:1)
我看到了几个问题。首先,您在此处指定的函数名称:
<form name="passForm" id="passForm" ng-submit="savePassForm(passForm)" >
与控制器中的名称不匹配:
$scope.changepassword = function(form){
其次,在提交函数之外创建passData
对象。这意味着当控制器首次加载时,它将具有范围变量的值,可能是undefined
。在您的函数内移动passData
的创建,然后使用范围变量的当前值创建它。