2017-09-14 76 views
1

我用于为我的应用检索JSON的URL有一个动态参数(:id)。我不太确定我如何处理这个问题,以便通过用户选择的ID。只需要一点指导。

app.factory('bookcategories', ['$http', function($http) { 
    return $http.get('http://52.41.65.211:8028/api/v1/categories/:id/books.json') 
    .success(function(data) { 
     return data; 
    }) 
    .error(function(err) { 
     return err; 
    }); 
}]); 

控制器

app.controller('BookCategoryController', ['$scope', 'categories', '$routeParams', function($scope, categories, $routeParams) { 
    categories.success(function(data) { 
    $scope.detail = data.categories[$routeParams.bookId]; 
    $scope.currentCategoryIndex = parseInt($routeParams.categoryId); 

     $scope.myCategoriesDetails = $scope.category; 
    }); 
}]); 

app.js

... 
    .when('/categories/:categoryId', { 
    controller: 'BookCategoryController', 
    templateUrl: 'views/booksincategory.html' 
}) 
... 

HTML

<h3 class="title">{{book.title}}</h3> 
+0

一个工厂应该返回一个对象,它具有该服务的用户可以调用的方法。你的工厂直接调用$ http并返回一个承诺。 –

+0

'bookcategories'应该是一项服务。顺便说一句。 'bookcategories'永远不会用在你的代码中? – lin

+0

使用1937021,我看到你不喜欢标记“正确的答案”。请检查您的所有问题并标记正确的答案。谢谢 – lin

回答

1

您可以使用下面的代码示例中的一些小服务来实现此目的。工厂在这里是一个错误的选择。

app.service('bookCategories', ['$http', function($http) { 
    this.get = function (id) { 
     return $http.get('http://52.41.65.211:8028/api/v1/categories/'+ id + '/books.json') 
     .success(function(data) { 
      return data; 
     }) 
     .error(function(err) { 
      return err; 
     }); 
    }; 
}]); 

而不是用它想:

app.controller('MyCtrl', function(bookCategories) { 
    bookCategories.get(1).then(function (result) { 
    console.log(result); 
    }); 
}); 
+0

*工厂在这里是一个错误的选择*,但您发布的代码实际上是伪装成服务的工厂。一个真正的服务会初始化'this',并且不会返回任何东西。 –