在同一控制器中的两个函数之间传递变量

时间:2015-11-22 15:10:25

标签: javascript angularjs

我在控制器中通过名称tst定义一个变量,我在一个函数中通过名称GetOrders给出一些值,但是当我在另一个函数{{1}中得到tst时它是未定义的,没有价值,这就是我所做的:

GetTotalValueOfProducts

有什么问题?

5 个答案:

答案 0 :(得分:1)

这是因为js是异步的。

您正在执行GetOrders()正在进行http请求,这需要时间,但在http请求完成之前,您正在调用GetTotalValueOfProducts,这使得它未定义。

<script>
 app.controller('OrderController', function ($scope, $http) {
    $scope.quantity = 1;
    $scope.Orders = {};
    var tst ;

    GetTotalValueOfProducts = function () {
       //but here 'tst' is undefined!!!
        var p = tst;

    }

    GetOrders = function () {
        $http.get('/Order/GetAllOrders').success(function (response) {
            $scope.Orders = response;
            //here i set tst, and tst has value, i checked it has value and it's not undefined
            tst = response;
           GetTotalValueOfProducts();

        });
    }
    GetOrders();



  });
 </script>

以上应该给你预期的结果。不确定何时要调用该功能。

答案 1 :(得分:1)

您好AngularJS都是异步的,所以在成功回调之前调用GetTotalValueOfProducts();会从http返回任何值。回调完成后,您必须调用您的函数。

您可以使用$ q的AngularJS来完成它。这是链接$q

答案 2 :(得分:1)

这是一个经典的JavaScript异步问题。第二个函数在第一个函数中的promise被解析之前执行。

答案 3 :(得分:0)

你应该致电

  GetTotalValueOfProducts();

成功回调$ http服务。像这样更改代码

  <script>
     app.controller('OrderController', function ($scope, $http) {
       $scope.quantity = 1;
       $scope.Orders = {};
       GetOrders = function () {
         $http.get('/Order/GetAllOrders').success(function (response) {
         $scope.Orders = response;
         GetTotalValueOfProducts(response)
        });
       }
      GetOrders();

      GetTotalValueOfProducts = function (tst) {
        var p = tst;
      }

     });
 </script>

答案 4 :(得分:-1)

尝试将tst变量附加到内部$scope对象中。 的修改 没有看到这些功能是异步的,这是草率的。您应该将结果提取为:

尝试将tst变量附加到内部$scope对象中。 编辑 没有看到这些功能是异步的,这是草率的。您应该将结果提取为。

app.controller('OrderController', function ($scope, $http) {
  $scope.quantity = 1;
  $scope.Orders = {};
  $scope.tst;
  GetOrders = function () {
      $http.get('/Order/GetAllOrders').success(function (response) {
          $scope.Orders = response;
          $scope.tst = response;
          GetTotalValueOfProducts();
      });
  }
  GetOrders();

  GetTotalValueOfProducts = function () {
     //but here 'tst' is undefined!!!
      var p = $scope.tst;
  }

});

甚至尝试使用$q