繁体   English   中英

Javascript —在另一个控制器作用域方法中获取变量的值

Javascript — Getting value of variable in another controller scope method

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

使用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个var,即initMap和sendLocationInfo之外。

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

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

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

有任何解决这个问题的方法吗?

1 个回复

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

4 如何在另一个控制器中更新作用域的值

我有两个控制器和一个工厂。 我正在尝试从controller1更新工厂中的值,以查看controller2上的更新。 Controller2是我的侧边栏的控制器。 控制器1: 厂 和控制器2: 我的工厂正在更新其值,但是在Controller 2上我看不到任何更 ...

8 如何使用控制器访问另一个作用域?

我知道您可以使用指令创建绑定,但是可以使用控制器吗? 也许这很简单,但是我不知道。 例如,我想在x作用域的视图中单击文本,然后在另一个作用域中执行一个函数。 这是我所拥有的: http : //plnkr.co/edit/CpPKsEGPZWzufB2K1FK3 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM