我有一个json文件,其中包含每篇文章都有id的文章信息。这是它的格式:
[{"title":"ISIS No. 2 killed in US special ops raid",
"id":"14589192090024090",
"agency":"foxnews",
"text":"Article text goes here.",
"topic":"Politics",
"imagePath":"resources\/images\/foxnews\/14589192090024090.img.jpg"},
{"title":", etc etc }]
在我的主页面上,我有一个列表视图,显示标题和作者,当您点击文章时,我希望它显示文本,主题等。我的angularJS工厂请求json看起来像这样:
var trooNewsServices = angular.module('trooNewsServices', ['ngResource']);
trooNewsServices.factory('Articles', ['$resource',
function($resource){
return $resource('resources/articles.json');
}]);
我使用以下方法访问主页控制器中的完整文章列表:
this.articles = Articles.query();
我正在努力的是当我点击特定文章时,我希望下一页显示该文章信息。我试图通过使用$ routeParams.id获取特定的id,然后在json中查找id来尝试这样做。这是我选择的文章控制器中的代码:
TrooNews.controller('ArticleController', ['$routeParams','Articles',
function($routeParams, Articles) {
//look through articles for specific article using routeparams
Articles.query().$promise.then(function(articles) {
for(i = 0; i < articles.length; i++){
if(articles[i].id===$routeParams.id){
this.selectedArticle=articles[i];
}
}
});
console.log(selectedArticle);
}]);
我收到错误&#39;无法实例化控制器ArticleController&#39;。如何在promise函数之外访问我的selectedArticle变量?
答案 0 :(得分:1)
TrooNews.controller('ArticleController', ['$routeParams','Articles',
function($routeParams, Articles) {
var parent = this;
parent.selectedArticle = null;
parent.setSelectedArticle = function(article){
parent.selectedArticle = article;
}
//look through articles for specific article using routeparams
Articles.query().$promise.then(function(articles) {
for(i = 0; i < articles.length; i++){
if(articles[i].id===$routeParams.id){
parent.setSelectedArticle(articles[i])
break;
}
}
});
}]);
答案 1 :(得分:0)
你正在进行异步通话,所以不要指望你在调用后立即得到结果。使用回调方法:
Articles.query().then(function(articles){
for(i = 0; i < articles.length; i++){
if(article[i].id===id){
selectedArticle=article;
}
}
console.log(selectedArticle);
})
或者您可以在回调调用中强制使用范围摘要。