感谢JoelCDoyle在我之前提出的问题(overflow question)的帮助下,我能够从JSON键值中获取一个ID并将其传递给另一个控制器,以便为API附加一个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');
};
}
但是现在我还有两个其他控制器需要添加它,我似乎无法让它们工作。
First One 应该和前两个一样简单。我刚刚复制了前一个并改变了一些像我之前做过的事情:
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);
};
}
正如您所看到的,我已将id的输出记录到控制台中,以确保它正在抓取ID,但确实如此。它在控制台中打印carID和CarDetailService.carId,这样就可以告诉我它正在抓取正确的id,但它没有将它注入 carDetails 控制器。我大部分时间都很难过。我很确定它与来自observeCars控制器的原始API调用有关:
/?observed=true&offset=0&page_size=20
但是它仍然抓住了正确的ID胸围只是没有将它注入 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>
第二个我无法弄明白是我的搜索控制器。它与observeCars控制器完全相同。这个也会在控制台中记录正确的CAR ID,但是当状态发生变化时,它不会加载它抓取的ID信息。
以下是代码:
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);
};
}
任何帮助都是非常感谢!
答案 0 :(得分:0)
你有丢失的代码吗?我认为你应该注入“API”依赖关系,如下所示:
carDetails.$inject = ['$scope', 'CarDetailService'];
function carDetails($scope, CarDetailService, API) {
carDetails.$inject = ['$scope', 'CarDetailService' 'API'];
function carDetails($scope, CarDetailService, API) {
答案 1 :(得分:0)
您需要将该ID传递给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! ***//
}
CarDetailService.getCarId = function() {
return CarDetailService.carId;
};
如果您不想使用stateParam并且只想将id传递给另一个控制器,您只需通过用于存储ID的服务。
carController.$inject = ['$scope', 'CarDetailService'];
function observedCars($scope, CarDetailService) {
function getCarId(){
return CarDetailService.getCarId;
}
}
控制器中的{{1}}
答案 2 :(得分:0)
NM。我搞定了。这是用户权限访问问题。