我要实现的目标是从我的JavaScript函数发送一个邮政编码列表,该列表根据用户输入的距离和邮政编码来获取范围。一旦获得邮政编码列表,请将列表发送至我的角度控制器。
最初,以下范围将抓取用户从表单中输入的邮政编码(见下文):
$scope.GetCurrentZip = function (){
try{
$http.get("../remote/ReturnZipCodes.cfm")
.then(function(response){
$scope.searchParam.Zip = response.data;
})
}
else{ console.log('No geolocation'); }
}
catch(err) { console.log(err.message); }
}
我想使用与上面相同的作用域。但是,我不想获取用户输入的值,而是想获取从函数中获取的列表。
以下是生成邮政编码列表的JavaScript函数:
var rad = function(x) {
return x * Math.PI / 180;
};
var getDistance = function(p1, p2) {
var R = 6378137; // Earth’s mean radius in meter
var dLat = rad(p2.lat - p1.lat);
var dLong = rad(p2.lon - p1.lon);
var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(rad(p1.lat)) * Math.cos(rad(p2.lat)) * Math.sin(dLong / 2) * Math.sin(dLong / 2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = R * c;
return d; // returns the distance in meter
};
function getZipCodes() {
var miles = document.getElementById("miles").options[document.getElementById("miles").selectedIndex].innerHTML;
var zip = document.getElementById("zip").value;
if (typeof zip === 'undefined' || typeof miles === 'undefined' || !zip.length || !miles.length) return false;
var zips = getZips();
var zip_list = "";
if (zips.length) {
// var list_item = "";
// for (i=0;i<zips.length;i++) {
// console.log(zips[i]);
// }
zip_list = zips.join();
}
return zip_list;
}
function getZips() {
var zipcode1 = getZipInfo(zip);
var res = [];
if (typeof zipcode1 === "undefined") return false;
for (i=0; i<zipinfo.length; i++) {
var zipcode2 = zipinfo[i];
var distance = getDistance(zipcode1, zipcode2);
//Convert meters into miles
distance = distance/1609.344;
if (distance <= miles) {
res.push(zipcode2.zip);
}
}
return res;
}
function getZipInfo(zip) {
for (i=0; i<zipinfo.length; i++) {
if (zipinfo[i].zip == zip) return zipinfo[i];
}
}
任何帮助将不胜感激。
更新:如@charlietfl所述,我不清楚我在问什么,我对此表示歉意。
我要问的是我想检索在我的JavaScript函数GetZips()中生成的邮政编码列表。
如@charlietfl所建议(再次感谢您的帮助),我要做的只是以下内容:
$scope.GetCurrentZip = function (){
try{
$scope.Zip = getZips();
}
catch(err) {}
}
更新:@LSD指出,它不会将do传递给不在数组中的值。是否可以更改接受列表的范围?该列表是一个字符串。
答案 0 :(得分:0)
下面的角度代码将为您提供隐藏值
var hidenctl = angular.element(document.querySelector('#hidenid'));
var hidenvalue = hidenctl.val();