这是我的初始模块:
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)来传递给第二个函数,但我不知道如何。
任何人都可以帮助我吗?
答案 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;
});
}