访问 AngularJS 中的特定 json 数据

Accessing specific json data in AngularJS

我有一个 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);
}]);

我收到一个错误 'Could not instantiate controller ArticleController'。如何在 promise 函数之外访问我的 selectedArticle 变量?

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;
            }
        }
    }); 
}]);

您正在进行异步调用,因此不要期望调用后结果立即出现。使用回调方式:

Articles.query().then(function(articles){

    for(i = 0; i < articles.length; i++){
        if(article[i].id===id){
            selectedArticle=article;
        }
    }

    console.log(selectedArticle);
})

或者您可以在回调调用中强制使用范围摘要。