我正在尝试设置服务来设置http请求数据。 我需要在一个控制器中设置数据,并在加载该页面时获取另一个控制器中的数据 我有类似
的东西angular.module('myApp').service('testService', ['Product','$q',
function(Product, $q) {
var products, targetProduct;
var deferred = $q.defer();
Product.query({
Id: 123
}, function(products) {
targetProduct = products[0];
deferred.resolve(products);
})
var getTargetProduct = function() {
var deferredtwo = $q.defer();
// return deferredtwo.promise;
deferred.promise.then(function(){
deferredtwo.resolve(targetProduct);
})
return deferredtwo.promise;
}
var setTargetProduct = function(targetProduct) {
targetProduct = targetProduct
}
return {
setTargetProduct: setTargetProduct,
getTargetProduct: getTargetProduct,
productPromise : deferred.promise
};
}
]);
导航控制器
testService.productPromise.then(function(products, $rootscope){
$scope.products= products;
$scope.targetProduct = products[0];
})
//when user click the project ng-click = setTargetProduct(product);
$scope.setTargetProduct = function(targetProduct) {
$rootscope.$broadcast('newProduct' targetProduct);
testService.setTargetProduct(targetProduct)
}
产品细节控制器
testService.getTargetProduct().then(function(targetProduct) {
$scope.$on('newProduct', function(newProduct){
console.log(newProduct) <---works if both controllers are loaded but undefined if user is not in the product detail page.
})
$scope.targetProduct = targetProduct;
})
但是,如果用户单击setTargetProduct
时尚未加载产品详细信息控制器(用户位于不同的页面),则未定义newProduct,因为$scope.$on
未加载且无法检测到广播。有没有什么办法解决这一问题?非常感谢!
答案 0 :(得分:1)
您应该将loadTargetProduct
放入$on
回调中,如果未加载新产品,请使用getTargetProduct
加载它。
$scope.$on('newProduct', function(newProduct){
if (!(newProduct)){
//if newProduct is not laoded, load it.
testService.getTargetProduct().then(function(targetProduct) {
$scope.targetProduct = targetProduct;
})
}
})