我有一个包含不同产品的主页,我想在其他视图中显示一个选定的产品。 (详细视图)。显示我使用ng-repeat的产品,它遍历product-Array。从ng-repeat中获取一个项目
现在,当点击一个按钮时,我会从ng-repeat中获得单个产品。然后,视图会随着所选产品而变为细节视图。视图的切换应该通过id,因为这需要向我的API发出请求。
在此状态下,我尝试使用$ routeParams,但它并没有工作。然后我在这里搜索了stackoverflow。我读过它可能是范围问题,因为我试图将ID传递给控制器。 (我需要另一个控制器中的Id)。 当我点击主页上的按钮时,没有任何事情发生。
我希望,有人有一个想法,如何解决这个问题。
这里是API的stample JSON文件:
{
"_id": "582ae2beda0fd7f858c109e7",
"title": "Lorem ipsum",
"smalldescription": "Lorem ipsum dolor sit amet,",
"longdescription": "Lorem ipsum dolor sit ametLorem ipsum ",
"price": "2500",
"img": "Imagetxt"
}
这里是我的代码:
app.js
angular.module('Productportfolio', ['ngRoute'])
.config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when('/home', {
templateUrl: '/components/home/home.html',
controller: 'ProductCtrl'
})
.when('/detail/:productId', {
templateUrl: '/components/detail/detail.html',
controller: 'DetailCtrl'
.otherwise({redirectTo: '/home'});
}]);
home.html的
<div ng-controller="ProductCtrl as ProductCtrl">
<div ng-repeat="product in ProductCtrl.products ">
<h3>{{product.title}}</h3>
<button ng-click="loadDetail(product)">Detailansicht</button>
</div>
</div>
个
ProductCtrl.js
angular.module('Productportfolio')
.controller('ProductCtrl', ['APIService','$location', function (APIService,$location) {
var vm = this;
vm.products = null;
init();
function init() {
APIService.getProducts()
.then(function (response) {
vm.products = response.data;
})
.catch(function (error) {
console.log("error at GET");
});
}
vm.loadDetail = function(product){
$location.path('/detail'+product.id);
}
}]);
APISvc.js
angular.module('Productportfolio')
.service('APIService', ['$http', function ($http) {
var svc = this;
svc.root = 'http://localhost:3000/api';
svc.API = {
'getProducts': getProducts,
'getProduct' : getProduct
};
return svc.API;
function getProducts() {
return $http({
method: 'GET',
url: svc.root + '/products'
})
}
function getProduct(id){
return $http({
method: 'GET',
url : svc.root +'/product/'+id
})
}
}]);
DetailCtrl.js
angular.module('Productportfolio')
.controller('DetailCtrl', ['APIService', '$routeParams', function (APIService, $routeParams) {
var vm = this;
vm.product = null;
vm.productId = $routeParams.productId;
init();
function init() {
APIService.getProduct(vm.productId)
.then(function (response) {
console.log(response);
vm.product = response.data;
})
.catch(function (error) {
console.log("error at GET");
});
}
}]);
检查vm.loadDe中的路径tail()函数。我认为它是$ location.path('/ detail /'+ product.id); – neelima
年,你是对的。我改变了它,点击按钮时没有任何反应。我不知道这种方法是否正确地通过ng-click来提交产品 –
您可以尝试从div中删除ng控制器吗? –