【发布时间】:2014-06-06 05:31:12
【问题描述】:
我有 2 个控制器 (Products) 和 (ProductsFilters) 以及 1 个服务 (ProductService)。
2 个控制器同时加载,第二个控制器 (ProductsFilter) 充当第一个控制器 (Products) 的侧边菜单。
Products控制器通过ProductService调用AJAX服务,并将返回的数据赋值给ProductService中的一个变量(Facets)。
同时 ProductsFilter 从 ProductService 中检索(Facets)。
现在的问题是,我想在 ProductsFilter 控制器中处理一些数据,然后再将其显示在视图中,但是在执行时,ProductService.Facets 返回一个空对象,因为 AJAX 调用尚未完成!
我尝试 $watch() ProductService.Facets 但没有成功。
这里是产品服务
.factory('ProductService', function(AppService, CategoryService, $stateParams, $location, $http) {
return {
facets: {},
browse: function(category_id, page, order, order_type) {
url = AppService.apiUrl() + 'products/browse.json?' + params;
var that = this;
return this.getProducts(url).then(function(response) {
that.facets.grouped_brands = response.grouped_brands;
that.facets.grouped_categories = response.grouped_categories;
that.facets.grouped_prices = response.grouped_prices;
that.facets.grouped_stores = response.grouped_stores;
return response;
});
},
getProducts: function(url) {
return $http.jsonp(url + '&callback=JSON_CALLBACK&ref=mobile_app', {cache: true})
.then(function(response) {
if (typeof response.data === 'object') {
return response.data;
}
});
}
}
})
这是 Products 控制器:
.controller('ProductsController', function($scope, ProductService) {
$scope.page = 1;
$scope.moreProducts = function() {
ProductService.browse(180, $scope.page)
.then(function(products) {
angular.extend($scope.products, products.products);
$scope.page +=1;
}
);
}
$scope.products = {}
})
这里是 ProductsFilter 控制器:
.controller('ProductsFiltersController', function($scope, ProductService) {
$scope.facets = ProductService.facets;
$scope.brand_facets = []
$scope.$watch('facets', function() {
angular.forEach($scope.facets.grouped_brands, function(value, key) {
$scope.brand_facets.push({brand: key, count: value})
});
});
})
【问题讨论】:
-
您能否更具体地说明它是如何不起作用的?您能否提供您尝试使用的
$watch的代码示例? -
您的
$watch代码是什么?我会建议或在您的 AJAX 回调方法中使用$broadcast和$on。 -
你能发布一些示例代码至少你的
Productservice逻辑 -
@MarcKline,感谢您的回复,我添加了代码示例
-
@guru,谢谢你的回复,我添加了代码示例
标签: angularjs