javascript - ng-repeat 重复,但为空

标签 javascript angularjs soundcloud

我正在使用 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.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()之类的更新...仍然不能解释这种奇怪的行为,但这可能有助于识别问题。

最佳答案

这不会是对正在发生的事情的最技术性的解释,所以我感谢所有的编辑。由于 Soundcloud Javascript SDK 不使用 $http 来获取轨道,因此范围不知道当 SC.get 返回轨道时需要更新。换句话说,即使 $scope.tracks 已填充,它也不知道要更新 View 。我建议编写一个服务来处理所有对 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);
    }
  };
})

将服务注入(inject) Controller 后,您将获得如下轨道:

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

只需设置服务获取您的 client_id 和 oauth_token 的位置即可。然后路径是您想要的任何端点,参数是您想要传递给 SC 的任何参数。

关于javascript - ng-repeat 重复,但为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24478402/

相关文章:

javascript - D3 中多线图的工具提示

python - URL 模式错误

javascript - Angular.js 按数组元素过滤

html - 边距不影响 soundcloud div

javascript - AJAX调用成功并返回数据后更新 View

javascript - spring4 和 spring security 上的 websocket SockJS/info?t=

javascript - 当选项是对象且默认值是整数 ID 时,如何设置默认 ngOptions 值

json - 发生错误,API SoundCloud自定义播放器

node.js - 是否可以在不申请新应用程序的情况下更改重定向?音云API

javascript - 在 JQuery 中为方法声明一个基变量