0

在我的控制,我创建$scopefunction它返回一个array。那function使用数据从ng-model指令的视图和一切工作正常(当我呼吁这个函数与视图中的表达式我得到返回的数据),,除了当我想用我的控制器返回array,我只是得到没有。

Plunker

JS代码:

app.controller('CalculatorCtrl', function($scope) { 

    $scope.deparature = { 
    'lat_1': '', 
    'lat_2': '', 
    'lat_3': '', 
    'long_1': '', 
    'long_2': '', 
    'long_3': '' 
    } 

    $scope.arrival = { 
    'lat_1': '', 
    'lat_2': '', 
    'lat_3': '', 
    'long_1': '', 
    'long_2': '', 
    'long_3': '' 
    } 

    $scope.select = { 
    'departure_1': '', 
    'departure_2': '', 
    'arrival_1': '', 
    'arrival_2': '' 
    } 

    $scope.depCoordinate = function() { 

    var cordLat = $scope.deparature.lat_1 + '/' + $scope.deparature.lat_2 + '/' + $scope.deparature.lat_3 + '/'; 

    if ($scope.select.departure_1 === 'S') { 
     var temp = '-' + cordLat; 
     var CordLatS = Dms.parseDMS(temp); 
    } else { 
     var CordLatS = Dms.parseDMS(cordLat); 
    }; 

    var cordLong = $scope.deparature.long_1 + '/' + $scope.deparature.long_2 + '/' + $scope.deparature.long_3 + '/'; 

    if ($scope.select.departure_2 === 'W') { 
     var temp = '-' + cordLong; 
     var CordLongW = Dms.parseDMS(temp); 
    } else { 
     var CordLongW = Dms.parseDMS(cordLong); 
    }; 

    return [CordLatS.toFixed(5), CordLongW.toFixed(5)]; 
    } 

    var cord = $scope.depCoordinate(); 
    var lati = cord[0]; 
    console.log(lati); 

    /*I need to pass the array result to var p1. How I can do that?*/ 
    $scope.distance = function() { 
     var p1 = new LatLon(50.06632, -5.71475); 
     var p2 = new LatLon(58.64402, -3.07009); 
     return p1.distanceTo(p2); 

}; 
}); 
+0

您可以使用相关的HTML更新您的问题,以便我们可以更好地了解它们如何一起工作?此外,一名运动员会很好。 – jbrown

+1

另外,什么是Dms?你正在使用它,但我没有看到它被定义或注入的地方。 – jbrown

+1

我编辑的职位,并添加Plunker链接与HTML代码和控制器。 DMS从一些第三方库中使用,该部分工作正常。 –

回答

0

首先,在你plunker一些事情,应该与此有关:

  1. NEVER做到这一点:<p>Test: {{ depCoordinate() }}</p>

它会调用你的函数多次引起一些问题。

  1. 请勿将ng-init()用于此类事物:<div class="list" ng-init="initWaves()">。它只能在特定情况下使用(即ng-repeat),请检查docs

然后..如果我理解你的问题很好,你想用视图中的returnedarray,所以,如果我是正确的,这里是如何对

$scope.array = [CordLatS.toFixed(5), CordLongW.toFixed(5)]; 
return $scope.array; 

并在您的查看只是使用它:

{{ array }} //或任何你想要做的事情。

+0

感谢您的回答。我只是错误地说明了我的问题......我想将该数组中的值存储在某个变量中,以便稍后用作另一个函数的参数。 Basiclly我想从我的视图保存输入数据,以便我可以计算所有其他的东西。 –

+0

就这样完成了,正如我所解释的那样,例如可以使用'{{array}}'。 – developer033

+0

你有什么我说的吗? – developer033

0

你的意思是说: “我什么也没得到”?据我所知,你在控制器的init状态下写了$scope.depCoordinate();。当你的控制器被执行时,该功能将立即生效。

我认为问题是,初始状态。因为在首次创建控制器时没有任何数据。所有的变量都是''。

所以,你要怎么做什么呢?您可以在视图层上使用ngChange指令与正在更新的变量(deparature,到达,请选择)具有功能是看更新的元素。然后,您需要按如下方式将函数写入控制器中;

$scope.watchChanges = function() { 
    var cord = $scope.depCoordinate(); 
    var lati = cord[0]; 
};