2017-09-14 48 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',並且不會返回任何東西。 –