向Angular工厂添加排序

时间:2015-06-08 15:38:59

标签: json angularjs

我想在Angular JS的工厂控制器中添加一个sort函数。 我已经拥有了以下内容:

var albumsApp = angular.module ('albumsApp',[])


        albumsApp.factory('albumFactory',function($http) {
        return {
            getAlbumsAsync: function(callback,$scope){

                $http.get('albums.json').success(callback);
                },

            };


        });
        albumsApp.controller ('albumController', function ($scope,albumFactory) {
            albumFactory.getAlbumsAsync(function(results){
            console.log('albumController async returned value');
            $scope.albums = results.albums;
                });
            albumFactory.changeSorting(function(results){
            console.log('changeSorting called');

                });

        });

我收到错误“TypeError:albumFactory.changeSorting不是函数”(这是指 albumFactory.changeSorting ),因为我还没有将它添加到工厂。我不知道该怎么做。 我正在使用的HTML代码如下:我想调用函数按字母顺序对JSON文件中的内容进行排序

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
<script src="js/angular.js"></script>
<script src="js/angular-route.js"></script>
<script type="text/javascript" src="modules/app.js" ></script>

</script>
<title>
</title>

</head>
<body ng-app="albumsApp">
<div data-ng-controller="albumController">
    <!-- <ul data-ng-repeat="album in albums| orderBy:'title'"> -->
    <ul data-ng-repeat="album in albums">
    <li>
      Artist is "{{album.artist}}" and title is "{{album.title}}"

    </li>
  </ul>  
<button data-ng-click="changeSorting()">Description</button>
</div>


</body>
</html>

JSON列表如下:

{
    "albums":[    
      {
      "artist": "Arctic Monkeys",
      "title": "AM"
       },
       {
      "artist": "Nirvana",
      "title": "Nevermind"
       },
       {
      "artist": "Buck 65",
      "title": "Man Overboard"    
      }
      ]

}

1 个答案:

答案 0 :(得分:0)

您的视图未直接连接到Angular服务 - 从视图调用的所有方法都应该在您的控制器中。您应该在控制器上有一个方法,而不是在工厂中。尝试将该功能移动到您的控制器:

orderBy

您可以将逻辑保留在控制器中。您可以在Angular的$filter模块中使用$filter('orderBy')(array, expression, reverse) 来帮助您排序:

{{1}}