【问题标题】:Javascript -- Getting value of variable in another controller scope methodJavascript——在另一个控制器范围方法中获取变量的值
【发布时间】:2023-04-02 21:33:02
【问题描述】:

使用 google maps api(地理位置)。 这是有问题的代码。

    var lat;
    var lng;
    var moveLat;
    var moveLng;
    var moveMarker;
    var marker;

    $scope.initMap = () => {

        // TODO:Privilege Check!

        var checkPrivilege = false;

        console.log("Clicked Generate Map Pin");

        var x = document.getElementById("demo");

        if (navigator.geolocation) {

            navigator.geolocation.getCurrentPosition(function (position) {

                lat = parseFloat(position.coords.latitude);
                lng = parseFloat(position.coords.longitude);
                console.log("Lat " + lat + " Lng " + lng);

                // The location of current user
                var CMU_SV = {lat: parseFloat(lat), lng: parseFloat(lng)};

                // The map, centered at current user
                var map = new google.maps.Map(
                    document.getElementById('map'), {zoom: 4, center: CMU_SV});

                map.setOptions({ minZoom: 15, maxZoom: 20 });

                // True for admin user
                if (checkPrivilege) {

                    // The marker, positioned at current user's position
                    moveMarker = new google.maps.Marker({position: CMU_SV, flat: false, map: map, draggable: true});
                }
                // False for regular user
                else {

                    //var moveMarker = new google.maps.Marker({position: CMU_SV, flat: false, map: map, draggable: true});
                    marker = new google.maps.Marker({position: CMU_SV, map: map});
                }
            });
        } else {
            x.innerHTML = "Geolocation is not supported by this browser.";
        }
    };

    $scope.sendLocationInfo = () => {

        var checkPrivilege = false;

        if (checkPrivilege) {

            moveLat = parseFloat(moveMarker.getPosition().lat);
            moveLng = parseFloat(moveMarker.getPosition().lng);

            console.log(moveLat, moveLng);
            $scope.LocationInfo = moveLat + "," + moveLng;
            $scope.hasLocationInfo = true;
        }
        else {

            lat = parseFloat(marker.getPosition().lat);
            lng = parseFloat(marker.getPosition().lat);

            console.log(lat, lng);
            $scope.LocationInfo = lat + "," + lng;
            $scope.hasLocationInfo = true;
        }

        var currentUser = $cookies.get('userName');

        $scope.message = currentUser + " has shared their location!";

        client.sendLocationInfo(currentUser, $scope.LocationInfo, $scope.hasLocationInfo)
            .then(() => {
                $scope.LocationInfo = "";
            });

        client.sendPublicWallMessage($scope.message)
            .then(() => {
                $scope.message = '';
            })
    };

如您所见,我在开始时初始化了 6 个变量——在 initMap 和 sendLocationInfo 之外。

还有两个地图标记(moveMarker 和marker)。如果需要,管理员用户可以移动 moveMarker。

在第二个函数中,我尝试调用每个地图标记来获取纬度和经度信息——将它们分配给各自的变量,然后将这些坐标保存在我的数据库中。

但是,对于 console.log(moveLat, moveLng) 和 console.log(lat, lng) - 我得到两个 NaN 值而不是所需的坐标。

有什么办法解决这个问题?

【问题讨论】:

  • 先在控制台检查moveMarker.getPosition().lat/lng,看看它吐出什么。那里可能有 parseFloat() 无法正确评估的字母,输出 NaN
  • 谢谢,这让我走上了正轨,我找到了。

标签: javascript


【解决方案1】:

您的代码是正确的。但是moveMarker.getPosition().lat中返回给parseFloat的值可能是字符串或其他无法解析为浮点值的值。

【讨论】:

猜你喜欢
  • 2017-02-19
  • 1970-01-01
  • 2013-10-28
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多