Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular、GitHub API、返回存储库和标记_Javascript_Git_Angularjs - Fatal编程技术网

Javascript Angular、GitHub API、返回存储库和标记

Javascript Angular、GitHub API、返回存储库和标记,javascript,git,angularjs,Javascript,Git,Angularjs,我对Angular是个新手,对于js也是个新手。我试图返回一个存储库列表,并在每个存储库中列出它的标记。我已经通过以下控制器和工厂获得了存储库 //Controller claGitHub.controller('repoController', function ($scope, reposFactory) { reposFactory.getRepos().success(function(result){ $scope.repos = result;

我对Angular是个新手,对于js也是个新手。我试图返回一个存储库列表,并在每个存储库中列出它的标记。我已经通过以下控制器和工厂获得了存储库

//Controller
claGitHub.controller('repoController', function ($scope, reposFactory) {

    reposFactory.getRepos().success(function(result){
        $scope.repos = result;
        console.log(result)
    });

});

//Factory
claGitHub.factory('reposFactory', ['$http', function($http){

    var repos = [];

    repos.getRepos = function() {
        return $http.get('https://api.github.com/users/google/repos');
    };

    return repos;

}]);
使用Angular,我可以遍历每个对象并在我的视图中输出它的属性,哇!问题在于tags属性是一个嵌套的JSON提要,而不是指向实际标记URL的链接。e、 g

tags_url: "https://api.github.com/repos/google/autoparse/tags"
因此,我尝试遍历每个对象,根据它的tags\uurl属性进行另一个AJAX调用,但成功率有限。我的知识参差不齐,这意味着我根本不知道它应该去哪里,以及它在语法上应该是什么样子。我是否需要制造另一个工厂和控制器?或者它应该是现有代码的一部分?任何帮助都将不胜感激

以下是我的观点:

<!-- Repeating section for featured repositories -->
<div data-ng-repeat="repo in repos" class="repo-tile">
    <h2>{{repo.name}}</h2>
    <ul>
        <li>{{repo.description}}</li>
    </ul>
</div>

{{repo.name}
  • {{repo.description}

我建议在repos服务中结束获取/格式化数据的整个过程

下面的代码返回带有标记承诺的repo,您也可以将整个响应封装在等待所有标记返回的承诺中,但渐进式渲染可能比等待所有标记都返回要好

claGitHub.factory('reposFactory', ['$http', function($http){

    var repos = {};

    repos.getRepos = function() {
        return $http.get('https://api.github.com/users/google/repos')
        .then(function(resp) {
          return resp.data.map(function(repo) {
            $http.get(repo.tags_url).then(function(resp) {
              repo.tags = resp.data
            })
            return repo
          })
        })

    };

    return repos;

}]);
然后,您可以绑定到每个repo的
.tags
属性,该属性将从
未定义的
开始,并在
tags\u url
请求解决后最终弹出到标签列表中

顺便说一句,避免在提供者后面加上“工厂”之类的后缀:如果它是通过工厂或服务定义的,那么调用它的代码就不重要了

您也有
repos
作为
[]
-切换到
{}

我认为第一个“.then(function(repos)”应该是“.then(function(resp)”?刚刚尝试过,效果非常好,非常好!非常感谢。