尝试返回特定于角度控制器中sectionId的文章列表。我可以使用articles.query返回整个文章列表,但传递的sectionId查询参数将被完全忽略。我尝试将其抽象为文章服务,但我不确定如何正确构建服务,因此它会引发更多错误。任何有关我如何实现这一点的帮助/示例,最好是作为服务,都会很棒。我正在使用mean.js.提前谢谢!
章节控制器
angular.module('sections').controller('SectionsController', ['$scope', '$stateParams', '$location', 'Authentication', 'Sections', 'SectionArticlesList', 'Articles',
function($scope, $stateParams, $location, Authentication, Sections, SectionArticlesList, Articles) {
..........
// Find existing Section
$scope.findOne = function() {
$scope.section = Sections.get({
sectionId: $stateParams.sectionId // sections return fine
});
// problem starts here
$scope.articles = Articles.query({
section:$stateParams.sectionId // this param is ignored
});
$scope.articles.$promise.then(function(data) {
// all articles in collection returned instead of section specific
console.log('Articles: '+ JSON.stringify(data));
$scope.articles = data;
});
文章模型
var ArticleSchema = new Schema({
created: {
type: Date,
default: Date.now
},
title: {
type: String,
default: '',
trim: true,
required: 'Title cannot be blank'
},
content: {
type: String,
default: '',
trim: true
},
section: {
type: Schema.ObjectId,
ref: 'Section'
},
user: {
type: Schema.ObjectId,
ref: 'User'
}
});
更新:
根据Kevin B和Brad Barber的建议,我尝试添加工厂和节点服务器路由,将$ stateParams.sectionId传递给特定的工厂实例。我在articles.routes.server中创建了一个新路由,以确保不与标准'/ articles /:articleId'路由冲突。不幸的是,我尝试的任何东西仍然会抛出错误或文章集合中的所有内容,这与我想要做的事情相反。
section.client.controller
//查找现有的部分 $ scope.findOne = function(){
$scope.section = Sections.get({
sectionId: $stateParams.sectionId
});
// fails no matter what is passed to query
$scope.articles = SectionArticlesList.query($stateParams.sectionId);
//$scope.SectionArticlesList.query($stateParams.sectionId);
//$scope.articles = SectionArticlesList.query({sectionId});
$scope.articles.$promise.then(function(data) {
// still only ever returns full list of articles
console.log('Length of articles: '+ JSON.stringify(data.length));
$scope.articles = data;
});
...
articles.client.services
angular.module('articles').factory('SectionArticlesList', ['$resource',
function($resource) {
return $resource('articles/:articleSectionId', {
articleSectionId: '@_id'
}, {
update: {
method: 'PUT'
}
});
}
]);
articles.server.routes
// Custom route
app.route('/articles/:articleSectionId')
.get(articles.listBySectionID);
// Custom binding
app.param('articleSectionId', articles.listBySectionID);
articles.server.controller
服务器端控制器功能似乎永远不会被调用,因为两个console.log都没有出现。
exports.listBySectionID = function(req, res, id) {
console.log('listBySection Called....'); // this is never printed
// have tried passing - id, sectionId and {section:id}
Article.find( {section:id} ).sort('-created').populate('user', 'displayName').exec(function(err, articles) {
if (err) {
console.log('listBySection err triggered...'); // this neither
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(articles);
}
});
};
我想我已经尝试了一切我能想到的正确传递sectionId但是还没有任何工作。控制台中的最新错误是下面的404.有趣的是,部分正在通过,但好像它正在寻找一个单一的资源,如一篇博文。
GET /sectionArticles?sectionId=555bfaf29a005c30cbfe6931 404
我不太明白默认的mean.js /articles
路由及其相应的列表功能是如何工作的,但是复制了一个类似的结构并将id作为参数传递给查询来检索只有特定的结果不是。
真的想了解这应该如何连线。如果有人能指出我做错了什么我会很感激!