Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用数据绑定时角度地理编码器失败_Javascript_Angularjs - Fatal编程技术网

Javascript 使用数据绑定时角度地理编码器失败

Javascript 使用数据绑定时角度地理编码器失败,javascript,angularjs,Javascript,Angularjs,我用的是: 基本上,当我使用这个时,它工作得很好: <reverse-geocode lat="40.730885" lng="-73.997383" /> 但问题是 当我有这样的时候: <reverse-geocode lat="{{vm.user.location[1]}}" lng="{{vm.user.location[0]}}"></reverse-geocode> 它不能处理{vm.user.location[1]}和{{vm.user

我用的是:

基本上,当我使用这个时,它工作得很好:

<reverse-geocode lat="40.730885" lng="-73.997383" />

但问题是

当我有这样的时候:

<reverse-geocode lat="{{vm.user.location[1]}}" lng="{{vm.user.location[0]}}"></reverse-geocode>

它不能处理{vm.user.location[1]}和{{vm.user.location[0]}的值,因为出于某种原因,它传递的是0而不是实际值

当我把它输入一个范围时,值会很好地显示出来

<span> Lat:{{vm.user.location[1]}}, Long:{{vm.user.location[0]}} </span>
Lat:{{vm.user.location[1]},Long:{{vm.user.location[0]}
我不确定发生了什么:(


为什么它认为我传递的是0的值,而不是数据库中的实际lat/long值?

您需要观察属性的变化,因为您正在动态加载位置数据,所以您还需要在这些值发生变化时更新指令

以下是如何添加观察行为:

.directive('reverseGeocode', function ($timeout) {
    return {
        restrict: 'E',
        template: '<div></div>',
        link: function (scope, element, attrs) {

            attrs.$observe('lat', geoCode);
            attrs.$observe('lng', geoCode);

            function geoCode() {
                $timeout(function() {
                    var geocoder = new google.maps.Geocoder();
                    var latlng = new google.maps.LatLng(attrs.lat, attrs.lng);
                    geocoder.geocode({ 'latLng': latlng }, function (results, status) {
                        if (status == google.maps.GeocoderStatus.OK) {
                            if (results[1]) {
                                element.text(results[1].formatted_address);
                            } else {
                                element.text('Location not found');
                            }
                        } else {
                            element.text('Geocoder failed due to: ' + status);
                        }
                    });
                });
            }
        },
        replace: true
    }
})
指令('reverseGeocode',函数($timeout){ 返回{ 限制:'E', 模板:“”, 链接:函数(范围、元素、属性){ 属性:$observe('lat',地理编码); 属性:$observe('lng',地理编码); 函数geoCode(){ $timeout(函数(){ var geocoder=new google.maps.geocoder(); var latlng=新的google.maps.latlng(attrs.lat,attrs.lng); geocoder.geocode({'latLng':latLng},函数(结果,状态){ if(status==google.maps.GeocoderStatus.OK){ 如果(结果[1]){ element.text(结果[1]。格式化的\u地址); }否则{ 元素。文本(“未找到位置”); } }否则{ element.text('地理编码器由于:'+状态而失败); } }); }); } }, 替换:正确 } })
演示:

“基本上,我的工作状态很好。”。在什么情况下可以正常工作?抱歉,我做了更新。你能在演示中复制这个问题吗?我不能,对我来说可以正常工作。好的,让我试试。所以基本上,你所做的对我来说也可以正常工作。我有一个db调用来获取一些信息,其中一个属性是一个名为location的数组。出于某种原因,当我使用绑定来传递这些值。但是,正如你所看到的,当我在该范围内输出值时,这些值显示得很好。啊,所以
vm.user.location
加载了REST调用?当然,这不会起作用,在时间指令使用它们之前没有值。哇。你是一位优秀的老师,非常有帮助。我喜欢这个网站,因为我每天都能学到很多。谢谢你现在我要读一些类似的东西来了解更多关于$observe的内容。我喜欢这段旅程!