返回解决AngularJS承诺我有,有一个getProduct(id)
功能如下图所示通过工厂函数
angular.module('app')
.factory('productFactory', ['$http', 'URL', function($http, URL){
var urlBase = URL.APISERVER;
//productFactory return object
var productFactory = {};
productFactory.getProducts = function(){
return $http.get(urlBase + '/products/');
}
productFactory.getProduct = function(id){
return $http.get(urlBase + '/products/' + id);
}
//return factory object
return productFactory;
}]);
在我的控制器我想解决getProduct(id)
承诺工厂对象。我在另一个功能getProduct(id)
中解决了这个承诺,在那里我传递了产品ID。
angular.module('portal')
.controller('ProductCtrl', ['$stateParams','productFactory',
function($stateParams, productFactory){
//Using 'controller as syntax' in view
var prod = this;
//Saves status of promise
prod.status;
//Get a single product
prod.product;
//Get the product id from stateParams and pass that to
//productFactory's getProduct(id) function
var id = $stateParams.id;
getProduct(id);//THIS IS WHAT CAUSES THE 500 ERROR
//Resolves promise
function getProduct(id){
productFactory.getProduct(id)
.success(function(product){
prod.product = product;
})
.error(function(error){
prod.status = 'Unable to load product data' + error.message;
});
}
}]);
然而,当我在我的控制器调用getProduct(id);
我得到500 error
那是因为我还没有进入$stateParams.id
当控制器编译。
我有一个产品清单。当点击某个产品时,我将重定向到该单一产品的视图。到目前为止它与500 error
一起工作。任何想法如何解决这个问题。我最初的想法是在我的控制器中有条件地调用getProduct(id);
。我相信有更好的方法来做到这一点。
UPDATE
下面是这种状态下,相应的路由配置。
.state('products-view', {
url: '/products/:id',
templateUrl: '/core/products/view.html'
})
显示该状态的路由配置。没有理由'$ stateParams'应该不可用假设'id'在url中 – charlietfl
@charlietfl我已经更新了我的问题。 –
如果在URL中有一个有效的ID应该都工作正常。什么是在开发工具网络中用于请求本身的url?它是显示正确的ID还是像'undefined'?如果在浏览器窗口中单独使用URL中的有效标识打开API,API是否工作? – charlietfl