我遇到角度问题而没有从输入中获取动态值。
这就是我想要做的。当用户点击地图时,角度会使用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检查器中的所有内容都可以正常显示(地图上的随机点):
然而,当我提交此表单并打印出$scope.formData
时,我得到一个空对象:
$scope.formData
Object {}
我在这里做错了什么?为什么控制器中的formData
为空,显然在HTML中设置了值,因为从我粘贴的屏幕截图中可以看到它?
答案 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中不需要这种模式。