如何从控制器范围内的函数返回值?

时间:2016-12-09 15:59:26

标签: javascript angularjs firebase

我正在尝试创建一个地图并用角度标记填充它并且进展顺利。现在我尝试将经度和经度给予函数返回的$ cope.map的中心。我怎么能这样做?函数当前返回' Undefined'这是为什么??有更好的方法吗?我很久以前就陷入了困境,而且我很有新意。你能帮我吗?请?下面是我的代码。



var appa = angular.module('appa',['firebase','uiGmapgoogle-maps']);
appa.controller('mainCtrl', function($firebaseObject,$scope) {

          $scope.coords = function(){
            var ref =  firebase.database().ref();
            var latArray = [];
            var lngArray = [];
            var cenlat;
            var cenlng;
              var marker = [];
            ref.once("value")
            .then(function(snapshot)
            {

            snapshot.forEach(function(child){
              latArray.push(child.child("Lat").val());
              lngArray.push(child.child("Long").val());
              var mark = {
              id: child.child("Id").val(),
              coords: {
              latitude: child.child("Lat").val(),
              longitude: child.child("Long").val()
              },
              options: { title: child.child("Alt").val() }
              };
              marker.push(mark);
            });

               cenlat = (Math.max.apply(Math,latArray)+Math.min.apply(Math,latArray)/2);
               cenlng = (Math.max.apply(Math,lngArray)+Math.min.apply(Math,lngArray)/2);

            });
            $scope.map.moo = cenlat;
          };
          $scope.map = {
            moo: "0",
            center:
            {
                    latitude: $scope.map.moo, longitude: 4 },
             zoom: 2
                  };
                  $scope.coords();


   });




1 个答案:

答案 0 :(得分:1)

欢迎来到js的异步闭包世界:)

return ref.once("value")

并将它带到你需要的地方

$scope.map = {};
// invoke
$scope.coords().then(function(snapshot){
  // ...
  $scope.map.moo = cenlat;
});

给它一个回调参数

$scope.coords = function(callback){
  ref.once("value").then(callback);
}


$scope.map = {
  // ...
};
// invoke
$scope.coords(function(snapshot){
  // ...
  $scope.map.moo = cenlat;
});

或实际上是您的代码:

$scope.map = {};
$scope.coords = function(){
  ref.once("value").then(function(snapshot) {
    // ...
    $scope.map.moo = cenlat;
  }
}

关于你的上一个问题

$scope.coords = function(){
     ref.once("value").then(function(snapshot) {
        // ...
        $scope.map.center.latitude = cenlat;
     }
 }

$scope.map = {
    center: {
        longitude: 4
    },
    zoom: 2
};

$scope.coords()