具有动态输入值

时间:2015-07-06 04:59:53

标签: javascript html angularjs forms data-binding

我遇到角度问题而没有从输入中获取动态值。

这就是我想要做的。当用户点击地图时,角度会使用lat / lon填充隐藏的表单字段,然后用户提交表单,最终会丢失控制器上的数据。

以下是相关的控制器代码:

$scope.formData = {};

    $scope.submit = function(addressform) {
      addressService.createAdddress($scope.formData).then(function(result) {
        $scope.addressResponse = result;
      }, function(err) {
          alert(err);
      });
    }

    $scope.userSelectedPoint = function () {
      $scope.lat = map.getLat();
      $scope.lon = map.getLon();
      $scope.address = map.getAddress();
    }

这是相关的HTML:

<form id="address_form" name="addressform" ng-submit="submit(addressform)">

   <input "lattitude" name="lattitude" type="hidden" ng-model="formData.lattitude" value="{{lat}}">
   <input id="longitude" name="longitude"type="hidden" ng-model="formData.longitude" value="{{lon}}">

   <p>Selected Address: {{address}}</p>
</form>

Chrome检查器中的所有内容都可以正常显示(地图上的随机点):

enter image description here

然而,当我提交此表单并打印出$scope.formData时,我得到一个空对象:

$scope.formData
Object {}

我在这里做错了什么?为什么控制器中的formData为空,显然在HTML中设置了值,因为从我粘贴的屏幕截图中可以看到它?

2 个答案:

答案 0 :(得分:2)

您需要将值分配给ng-model变量,而不是value

作为

<input "lattitude" name="lattitude" type="hidden" ng-model="formData.lattitude" />
<input id="longitude" name="longitude"type="hidden" ng-model="formData.longitude" />

将值分配给formData.lattitude

$scope.formData = {};
$scope.userSelectedPoint = function () {
  $scope.formData.lattitude = map.getLat();
  $scope.formData.longitude  = map.getLon();
  $scope.formData.address = map.getAddress();
}

如果你为变量提供一个值,并且你使用ng-model将该变量赋值给输入,那么输入就是获得变量的值,如果我们改变输入值变量值得到变化,则输入变量值。

因此,您将lattitude对象的formData属性分配给输入。这意味着如果您更改$scope.formData.lattitude输入值,则会更改。

答案 1 :(得分:0)

在角度中,您无法使用value属性。您必须使用经度/纬度初始化 formData 对象。因此你也需要任何伪造的隐藏领域。你在Angular中不需要这种模式。