AngularJS和Rails - 按类别发布的帖子

时间:2015-09-01 07:13:57

标签: ruby-on-rails angularjs

我有一个Rails应用,可以使用show操作按类别获取帖子。

路线是:/categories/:id(.:format) categories#show

.json也会呈现给定类别的帖子,因为我修改了as_json方法以包含帖子。

从AngularJS部分开始,我使用ui-routerangular-rails-templates并且我有:

服务:

var app = angular.module('app', ['ui.router', 'templates']);

app.factory('categories', ['$http', function($http) {
    var o = {
        categories: []
    };
    o.get = function(id) {
        return $http.get('/category/' + id + '.json').then(
            function(res){ return res.data; }
        );
    };
}]);

控制器:

app.controller(
    'CategoriesCtrl',
    [
        '$scope',
        'categories',
        'category',
        function($scope, categories, category) {
            $scope.category = category; //just for testing purposes
        }
    ]
);

配置

app.config([
    '$stateProvider',
    '$urlRouterProvider',
    function($stateProvider, $urlRouterProvider) {
        $stateProvider.state(
            'category',
            {
                url: '/category/:categoryId',
                templateUrl: 'categories/_categories.html',
                controller: 'CategoriesCtrl'
            }
        );
        $urlRouterProvider.otherwise('home');
    }
]);

我不明白出了什么问题。日志是"Error: [$injector:undef] Provider 'categories' must return a value from $get factory method.它想要返回的内容以及如何返回?

1 个答案:

答案 0 :(得分:2)

您错过了从工厂返回o对象,它应该是:

app.factory('categories', ['$http', function ($http) {
    var o = {
        categories: []
    };
    o.get = function (id) {
        return $http.get('/category/' + id + '.json').then(function (res) {
            return res.data;
        });
    };

    // You missed this
    return o;
}]);