繁体   English   中英

ng-repeat重复,但是为空

[英]ng-repeat repeats, but is empty

我正在使用Soundcloud API来获取输入到搜索框中的查询的轨道,如下所示:

$scope.tracks = [];

$scope.updateResults=function(song){
        if(song.length==0){
            $scope.tracks = [];
        }
        if(song.length>3){
            SC.get('/tracks', { q: song, license: 'cc-by-sa' }, function(tracks) {
                $scope.tracks = tracks;
                            //$scope.$apply() doesn't work either
            });
        }
    }

只要在搜索$scope.updateResults键入内容,就会调用$scope.updateResults 这一切都很好。 我什至尝试记录$scope.tracks ,它是一个数组,并用匹配搜索结果的轨道填充。 根据Soundcloud API参考,每个轨道都有一个title属性。 我通过以下方法对此进行了测试:

console.log($scope.tracks[0].title) ,我得到了一个带有标题的漂亮字符串。

现在在我的ng-repeat ,它是这样写的:

<ul>
    <li ng-repeat="track in tracks">{{track.title}}</li>
</ul>

我得到几个要点,但它们都是空的。 换句话说{{track.title}}不存在吗? 我已经测试过这是一个有效的属性。 另外,我知道$scope.tracks正在填充,因为确实存在列表项,但是它们都是空的。

谢谢你的帮助!

编辑:我对ng-repeat进行了一些研究,并了解到它会.push()诸如.push()更新...仍然不应该解释这种奇怪的行为,但它可能有助于确定问题。

这并不是正在发生的事情的最技术性的解释,因此,我感谢所有编辑。 由于Soundcloud Javascript SDK不使用$ http来获取曲目,因此,当SC.get返回曲目时,示波器不知道需要更新。 换句话说,即使$ scope.tracks已填充,它也不知道要更新视图。 我建议编写一个服务,处理对Soundcloud的所有GET / POST / PUT / DELETE请求。 这是一个使用回调的简单示例:

.factory('Soundcloud', function($http, $rootScope, $timeout, $q) {

  var request = function(method, path, params, callback) {
    params.client_id = sc.soundcloud.client_id;
    params.oauth_token = sc.soundcloud.access_token;

    $http({
      method: method,
      url: sc.soundcloud.api.host + path,
      params: params
    })
    .success(callback);
  };

  return {
    get: function(path, params, callback) {
      request('GET', path, params, callback);
    },

    put: function(path, params, callback) {
      request('PUT', path, params, callback);
    },

    post: function(path, params, callback) {
      request('POST', path, params, callback);
    },

    delete: function(path, params, callback) {
      request('DELETE', path, params, callback);
    }
  };
})

将服务注入控制器后,您将获得如下所示的轨道:

Soundcloud.get('/tracks', {limit: 5}, function(tracks) {
  $scope.tracks = tracks;
});

只需在服务获取您的client_id和oauth_token的位置进行设置即可。 那么路径就是您想要的端点,而params是想要传递给SC的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM