Получение идентификатора из контроллера и добавление вызова API другого контроллера

0

вот мой первоначальный модуль:

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" или что-то другое для каждого элемента массива. Мне нужно захватить этот идентификатор и сохранить его в переменной как-то и вспомнить в другом контроллере. Причина в том, что, когда этот автомобиль отображается с незначительной информацией, они могут нажать "просмотреть детали", и он откроет другую страницу, на которой будут отображаться все детали автомобиля на основе идентификатора.

Может быть, что-то вроде этого:

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);
  });
}

Мне просто нужно захватить "идентификатор автомобиля" из функции "taskData", которую отправляет JSON и добавляет ее в вызов API функций "carDetails" (как вы видите выше). Поэтому мне нужно явно создать переменную (например, $ id), чтобы перейти ко второй функции, но я не знаю, как это сделать.

Может кто-нибудь мне помочь?

3 ответа

0
Лучший ответ

Получил эту работу на основе этого сообщения. Вставка ключа JSON ID в директиву ng-click, а затем передать это в другой контроллер

Вот сценарий, который работает:

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;
  });
}
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);
        });
}
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);
  });
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню