Благодаря помощи JoelCDoyle из предыдущего вопроса, который я задал (вопрос переполнения), я могу получить идентификатор из значения ключа JSON и передать его другому контроллеру, чтобы добавить конец вызываемого API-адреса.
Вот код, который работает с предыдущего поста:
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);
};
}
myTasks.$inject = ['$scope', '$http', 'API', 'CarDetailService', '$state'];
function myTasks($scope, $http, API, CarDetailService, $state) {
$http.get( API + '/tasks' ).
success(function(data) {
$scope.mainTask = data;
console.log(data);
});
$scope.selectCar = function(carId) {
CarDetailService.setCar(carId);
$state.go('taskDetails');
};
}
// EDITED
carDetails.$inject = ['$scope', 'CarDetailService', '$http', 'API'];
function carDetails($scope, CarDetailService, $http, API) {
// console.log('Post injection: ' + CarDetailService.carId);
CarDetailService.getCar().success(function(details) {
$scope.details = details;
});
}
теперь я смог добавить его к другому контроллеру, просто скопировав код из другого и изменив несколько таких вещей:
myCars.$inject = ['$scope', '$http', 'API', 'CarDetailService', '$state'];
function myCars($scope, $http, API, CarDetailService, $state) {
$http.get( API + '/car' ).
success(function(data) {
$scope.myCars = data;
console.log(data);
});
$scope.selectCar = function(carId) {
CarDetailService.setCar(carId);
$state.go('taskDetails');
};
}
Но сейчас у меня есть два других контроллера, которые мне нужно добавить, и я не могу заставить их работать.
Первый должен быть таким простым, как первые два. Я только что скопировал предыдущий и изменил несколько вещей, как раньше:
observedCars.$inject = ['$scope', '$http', 'API', 'CarDetailService', '$state'];
function observedCars($scope, $http, API, CarDetailService, $state) {
$http.get( API + '/car/?observed=true&offset=0&page_size=20' ).
success(function(data) {
$scope.observed = data;
console.log(data);
});
$scope.selectCar = function(carId) {
console.log('Car ID is ' + carId);
CarDetailService.setCar(carId);
$state.go('taskDetails');
console.log( 'Get Car is ' + CarDetailService.carId);
};
}
Как вы можете видеть, у меня есть вывод идентификатора, который регистрируется в консоли, чтобы убедиться, что он захватывает идентификатор, и он это делает. Он печатает на консоли carID и CarDetailService.carId, так что говорит мне, что он захватывает правильный идентификатор, но не вводит его в контроллер carDetails. По большей части я в тупике. Я уверен, что он имеет какое-то отношение к исходному вызову API от наблюдаемого контроллера Cars:
/?observed=true&offset=0&page_size=20
Но опять же он по-прежнему захватывает правильный идентификационный бюст, просто не вводит его в контроллер carDetails.
Ссылки HTML ng-click:
<div ng-repeat="task in mainTask.Tasks" class="myCar">
<div class="viewCar"><a ng-click="selectCar(task['CAR ID'])">View Details</a></div>
</div>
<div ng-repeat="car in myCars['My CARs']" class="myCar">
<div class="viewCar"><a ng-click="selectCar(car['CAR ID'])">View Details</a></div>
</div>
<div dir-paginate="obv in observed['Observed CARs'] | filter:q | itemsPerPage: 5" class="myCar">
<div class="viewCar"><a ng-click="selectCar(obv['CAR ID'])">View Details</a></div>
</div>
Второй я не могу понять, это мой поисковый контроллер. Он делает то же самое, что и наблюдаемый контроллер Cars. Он также регистрирует правильный идентификатор автомобиля в консоли, но при изменении состояния он не загружает идентификационную информацию той, которая была захвачена.
Вот этот код:
function searchRes($scope, $http, API){
$scope.$watch('search', function() {
fetch();
});
$scope.currentPage = 1;
$scope.pageSize = 5;
function fetch(){
$http.get(API + "/search/" + $scope.search)
.then(function(data){
$scope.results = data;
});
}
$scope.select = function(){
this.setSelectionRange(0, this.value.length);
}
$scope.selectCar = function(carId) {
console.log('Car ID is ' + carId);
CarDetailService.setCar(carId);
$state.go('taskDetails');
console.log( 'Get Car is ' + CarDetailService.carId);
};
}
Любая помощь приветствуется!
NM. Я заработал. Это проблема доступа к правам пользователей.
Вам нужно передать этот идентификатор в stateParam
чтобы вы могли его захватить в другом controller
$scope.selectCar = function(carId) {
console.log('Car ID is ' + carId);
CarDetailService.setCar(carId);
$state.go('taskDetails',{ carId:carId });
console.log( 'Get Car is ' + CarDetailService.carId);
};
controller: function($stateParams){
$stateParams.contactId //*** Exists! ***//
}
Если вы не хотите использовать stateParam и хотите передать идентификатор другому контроллеру, вы можете просто пройти через свой сервис, который вы используете для хранения идентификатора.
CarDetailService.getCarId = function() {
return CarDetailService.carId;
};
carController.$inject = ['$scope', 'CarDetailService'];
function observedCars($scope, CarDetailService) {
function getCarId(){
return CarDetailService.getCarId;
}
}
У вас отсутствует код? Я думаю, вы должны ввести "зависимость API", как показано ниже:
carDetails.$inject = ['$scope', 'CarDetailService'];
function carDetails($scope, CarDetailService, API) {
carDetails.$inject = ['$scope', 'CarDetailService' 'API'];
function carDetails($scope, CarDetailService, API) {