Javascript AngularJS:如何从地理编码功能更新数据模型?
AngularJS和JavaScript新手,这里 我正在尝试构建一个控制器,它将提交一个地理代码请求,并用结果更新其模型。但是,我在更新模型时遇到了问题 你可以在这里看到一个生活在小提琴中的例子: 在我的Javascript AngularJS:如何从地理编码功能更新数据模型?,javascript,angularjs,google-maps,Javascript,Angularjs,Google Maps,AngularJS和JavaScript新手,这里 我正在尝试构建一个控制器,它将提交一个地理代码请求,并用结果更新其模型。但是,我在更新模型时遇到了问题 你可以在这里看到一个生活在小提琴中的例子: 在我的submitQuery函数中,我无法正确地将geocode方法的结果传递回search数组。有什么建议吗 这是我的HTML: <div ng-app="weather"> <div ng-controller="SearchController as searchCt
submitQuery
函数中,我无法正确地将geocode方法的结果传递回search
数组。有什么建议吗
这是我的HTML:
<div ng-app="weather">
<div ng-controller="SearchController as searchCtrl" class="container-fluid">
<div>
<form ng-submit="searchCtrl.submitQuery()" name="searchForm" role="form" class="">
<div class="form-group">
<label for="searchInput">Search</label>
<input id="searchInput" class="form-control" type="text" ng-model="searchCtrl.search.geoQuery" placeholder="Enter your zip code...">
<input id="searchSubmit" class="btn btn-primary" type="submit">
</div>
</form>
<h1>{{ searchCtrl.search.resultLatLng }}</h1>
</div>
<div class="playback">
<small>searchCtrl.query = {{ searchCtrl.search.geoQuery }}</small>
<small>searchCtrl.resultLatLng = {{ searchCtrl.search.resultLatLng }}</small>
</div>
</div>
</div>
我用一个有效的解决方案更新了你的小提琴,其中包括一些修正。 主要问题:
this.search
是数组中的一个对象。它应该只是一个普通对象(没有数组)this
,因为它会引用其他内容。我用添加that=this
然后使用that
的约定修复了它。显然,这个
在javascript中是一个令人困惑的概念,但却是一个重要的概念。请阅读此
此处:$scope.$apply()
,以更新视图,特别是当操作在异步操作的回调中运行时,正如我们在这里看到的。这是一本过时但很好的读物:祝你好运 也许这个演示可以帮助你:回答得很好,ramdog。谢谢你的指点和阅读材料!
var app = angular.module("weather", []);
app.controller("SearchController", function($scope){
var geocoder = new google.maps.Geocoder();
this.search = [
{
geoQuery: "",
resultLatLng: "",
resultCity: ""
}
];
this.submitQuery = function() {
geocoder.geocode({'address': this.search.geoQuery}, function(result, status){
if (status === google.maps.GeocoderStatus.OK) {
search.resultLatLng = {
lat: result[0].geometry.location.lat(),
lng: result[0].geometry.location.lng()
};
} else {
alert("Something went wrong: " + status);
return false;
}
});
};
});