【问题标题】:Use returned array from $scope function in the controller使用控制器中 $scope 函数返回的数组
【发布时间】:2016-11-24 04:52:58
【问题描述】:

在我的控制器中,我创建了$scope function,它返回一个arrayfunction 使用带有 ng-model 指令的视图中的数据,一切正常(当我使用视图中的表达式调用此函数时,我得到返回的数据),except 当我想使用它时在我的控制器中返回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);

};
});

【问题讨论】:

  • 您能否使用相关的 HTML 更新您的问题,以便我们更好地了解它们是如何协同工作的?另外,一个plunker会很好。
  • 还有,什么是 Dms?您正在使用它,但我看不到它是在哪里定义或注入的。
  • 我编辑了帖子并添加了带有 HTML 代码和控制器的 Plunker 链接。 DMS 是从某个第三方库中使用的,该部分工作正常。
  • 永远不要这样做:<p>Test: {{ depCoordinate() }}</p>。它会多次调用你的函数,导致几个问题。放一个console.log('anything');,看看你自己。 ng-init() 应仅在特定情况下使用(即ng-repeat)。

标签: angularjs model-view-controller ionic-framework angularjs-scope


【解决方案1】:

首先,您的 plunker 中有一些内容应该与此处相关:

  1. 切勿这样做:<p>Test: {{ depCoordinate() }}</p>

它会多次调用你的函数,导致几个问题。

  1. 不要将ng-init() 用于这种事情:<div class="list" ng-init="initWaves()">。它只应在特定情况下使用(即 ng-repeat),请查看docs

那么.. 如果我很好地理解了你的问题,你想在你的视图中使用returned array,所以,如果我是正确的,这里是操作方法

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

在你的视图中使用它:

{{ array }} // 或者你想用它做什么。

【讨论】:

  • 感谢您的回答。我只是误会了我的问题...我想将该数组中的值保存在某个变量中,以便它们以后可以用作另一个函数的参数。基本上我想从我的视图中保存输入数据,以便以后我可以计算所有其他的东西。
  • 这样就完成了,就像我解释的那样,你可以使用它{{ array }} 为例。
  • 我说的你明白了吗?
  • 是的,我试过了,它可以查看。但是我可以在控制器中将该数组用于其他功能吗?我知道当视图加载时,它们会自动启动控制器并执行 $scope.depCoordinate 函数。因此,当在视图中调用它的数组时,我会看到结果。但主要问题是如何在控制器中获取该数组? PS。我编辑了帖子并添加了我需要的功能(使用 cmets)
  • 不行吗? var p1 = new LatLon($scope.array[0], $scope.array[1]);
【解决方案2】:

“我什么都得不到”是什么意思?据我所知,您在控制器的初始化状态下写了$scope.depCoordinate();。当您的控制器被执行时,该功能将立即生效。

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

那么,你到底想做什么?您可以在视图层上使用 ngChange 指令与元素一起使用用于查看更新的函数来更新变量(出发、到达、选择)。然后你需要在你的控制器中写一个函数,如下所示;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    相关资源
    最近更新 更多