вот мой первоначальный модуль:
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), чтобы перейти ко второй функции, но я не знаю, как это сделать.
Может кто-нибудь мне помочь?
Получил эту работу на основе этого сообщения. Вставка ключа 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;
});
}
Вы можете использовать простое 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);
});
}
Вы можете использовать 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);
});
}