从控制器中获取ID并添加到另一个控制器API调用

时间:2016-07-25 22:50:42

标签: javascript jquery angularjs json

这是我的初始模块:

angular.module('ngApp', [])
.factory('authInterceptor', authInterceptor)
.constant('API', 'http://myserver.com/ecar/api')
.controller('task', taskData)

function taskData($scope, $http, API) {
  $http.get( API + '/tasks' ).
  success(function(data) {
    $scope.mainTask = data;
    console.log(data);
  });
}

这将返回一个JSON数组,其中包含一个键“CAR ID:1297”或数组中每个项目的任何内容。我需要获取该ID并以某种方式将其存储在变量中并在另一个控制器中调用它。原因是,当这辆车显示次要信息时,他们可以点击“查看详细信息”,它将打开另一个页面,根据ID显示汽车的所有细节。

也许是这样的:

angular.module('ngApp', [])
.factory('authInterceptor', authInterceptor)
.constant('API', 'http://myserver.com/ecar/api')
.controller('task', taskData)
.controller('carDetails', carDetails)

function taskData($scope, $http, API) {
  $http.get( API + '/tasks' ).
  success(function(data) {
    $scope.mainTask = data;
    console.log(data);
  });
}

function carDetails($scope, $http, API) {
  $http.get( API + '/car/$id' ).
  success(function(data) {
    $scope.mainTask = data;
    console.log(data);
  });
}

我只需要从JSON发送的“taskData”函数中获取“CAR ID”,并将其添加到“carDetails”函数API调用中(如上所示)。所以我需要显然创建一个变量(例如$ id)来传递给第二个函数,但我不知道如何。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

您可以使用Angular Services跨两个控制器共享数据。

angular.module('ngApp', [])
.factory('authInterceptor', authInterceptor)
.constant('API', 'http://myserver.com/ecar/api')
.controller('task', taskData)
.service('carService', carService)
.controller('carDetails', carDetails)

function taskData($scope, $http, API, carService) {
  $http.get( API + '/tasks' ).
  success(function(data) {
    $scope.mainTask = data;
    console.log(data);
  });
  // Put a click listener for Car, suppose it takes in the id as the parameter
  $scope.carClickListener = function(data) {
      carService.setSelectedCarId(data);
  }
}

// Use to service to store the selected Car Id
function carService() {
   var selectedCarId = "";
   this.setSelectedCarId = function(id) {
       selectedCarId = id;
   }
   this.getSelectedCarId = function() {
       return selectedCarId;
   }
}
function carDetails($scope, $http, API) {
  $http.get( API + '/car/$id' ).
  success(function(data) {
    $scope.mainTask = data;
    console.log(data);
  });
}

答案 1 :(得分:0)

您可以使用简单的value来执行此操作。首先创建value

angular.module('ngApp').value('carValue', { id: '' });

然后将该值注入控制器:

function taskData($scope, $http, API, carValue) {
    [...]
    carValue.id = 'someValue'; <-- set this however you need to
    [...]
}

function carDetails($scope, $http, API, carValue) {
    $http.get( API + '/car/' + carValue.id )
        .success(function(data) {
            $scope.mainTask = data;
            console.log(data);
        });
}

答案 2 :(得分:0)

根据这篇文章得到了这项工作 - Inserting JSON ID key into ng-click directive and then pass that into another controller

以下是适用的脚本:

ngular.module('ngApp', [])
.service('CarDetailService', CarDetailService)
.controller('task', taskData)
.controller('carDetails', carDetails);

CarDetailService.$inject = ['$http', 'API'];
function CarDetailService($http, API) {
  var CarDetailService = this;
  CarDetailService.setCar = function(carId) {
    CarDetailService.carId = carId;
  };

  CarDetailService.getCar = function() {
    return $http.get(API + "/car/" + CarDetailService.carId);
  };
}

taskData.$inject = ['$scope', '$http', 'API', 'CarDetailService'];
function taskData($scope, $http, API, CarDetailService) {
  $http.get( API + '/tasks' ).
  success(function(data) {
    $scope.mainTask = data;
    console.log(data);
  });

  $scope.selectCar = function(carId) {
    CarDetailService.setCar(carId);
    $location.url('/car-details-route');  //go to details page
  };
}

carDetails.$inject = ['$scope', 'CarDetailService'];
function carDetails($scope, CarDetailService) {
  CarDetailService.getCar().success(function(details) {
    $scope.details = details;
  });
}