2017-01-12 41 views
0

每当我们在输入或选择标签上使用ng-model时,将ng-model对象作为undefined转换为控制器。 但是一旦触及输入获取属性的适当对象。ng模型值不一致

为什么:

  • 在直接提交不触动输入越来越formDataundefined
  • 一旦触摸或在输入框中输入值,并在提交适当的formData对象的形式。

    { 
        "firstName": "" 
    } 
    

示例代码:

var myApp = angular.module('myApp',[]); 
 

 
myApp.controller('MyCtrl', function($scope) { 
 
    $scope.submitForm = function(formData) { 
 
     console.log(formData); 
 
    }; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myApp" ng-controller="MyCtrl"> 
 
<form> 
 
<input type="text" ng-model="obj.firstName" name="firstName"> 
 
    <input type="submit" value="Submit" ng-click="submitForm(obj)"/> 
 
</form> 
 
</div>

+1

声明'$ scope.obj = { “名字”: “”}'在控制器然后检查。 –

+0

我想知道同一个ng模型的这种不同行为背后的原因。 –

回答

0

首先,你需要初始化obj对象在控制器

$scope.obj ={}; 
+0

我想知道同一ng模型的这种不同行为背后的原因。 –

1

如果您不希望页面加载时未定义对象,则需要初始化对象。

目前发生的情况是,当输入被“接触”时,存储模型的对象被初始化。

初始化对象添加以下代码:

var obj = { 
       "firstName": "" 
       } 
+0

我想知道同一个ng模型的不同行为背后的原因。 –

+1

就像我在我的回答中提到的那样,是因为在输入被触摸之前,模型不存在,因为它从来没有被初始化。但是,当您使用输入时,模型会在Angular的背景中自动初始化。所以基本上formdata是未定义的,因为对象尚未存在,因为它尚未初始化。恐怕我无法解释那么好。 – Callum

0

你尝试过的东西,如:

var myApp = angular.module('myApp',[]); 

myApp.controller('MyCtrl', function($scope) { 
$scope.obj = {} 

    $scope.submitForm = function(formData) { 
     console.log(formData); 
    }; 
});