需要帮助Angular Factory

时间:2016-06-16 21:40:52

标签: javascript angularjs angular-resource

你好角度社区!

我很困惑,我想我已经理解了工厂的目的和概念,但似乎没有......

这是我的问题(对你来说当然很简单):

我想使用我的REST API(完美地工作)使用Angular和.factory ...

rest.js

var app = angular.module('urlShortener', ['ngRoute', 'ngResource']);

app.factory('API', ['$resource',
  function($resource){
    return $resource('/link'});
  }],{
    get: {method:GET},
        post: {method:POST},
        put: {method:PUT},
        delete: {method:DELETE},
    }
);

app.controller('GetAll', function ($scope) {
        $scope.links = API.get();
});

index.ejs

<div ng-controller="GetAll">
    <ul>
        <li ng-repeat="link in links">
          <p>{{link.itemId}} --> {{link.url}}</p>
        </li>
      </ul>
  </div>

不工作... 2小时我正在咨询Angular API,没有解决方案:/

请帮助我,我在浪费时间:'(

\\\解决方案////

rest.js

app.factory('API', ['$resource', function($resource) { return $resource('/link'); }]);

app.controller('GetAll', ['$scope', 'API', function ($scope, API) {
    API.query().$promise.then(function(links) {
        $scope.links = links;
    });
}]);

感谢@dfsq help :)

5 个答案:

答案 0 :(得分:1)

您不能只将$ resource实例分配给$ scope.links,您需要在基础承诺解决时执行此操作:

app.controller('GetAll', ['$scope', 'API', function ($scope, API) {
    API.get().$promise.then(function(links) {
        $scope.links = links;
    });
}]);

答案 1 :(得分:0)

如果您想要执行api请求,请使用$http

这是我在我的应用中使用的一段代码:

angular

    .module('myApp')
    .factory('apiFactory', apiFactory);

function apiFactory($http) {

    return {
        getDataFromApi: getDataFromApi,
    };

    function getDataFromApi(url) {

        return $http({
            method: 'GET', // or post or whatever
            url: url,
            headers: {
               ...
            }
        })

        .then(success)
        .catch(fail);

        function success(response) {
            return response.data;
        }

        function fail(response) {
            // handle error
        }

    }

}

答案 2 :(得分:0)

您必须在控制器中注入“API”。

app.controller('GetAll', function ($scope, API) {
    $scope.links = API.get();
});

答案 3 :(得分:0)

这是你在找什么? API For Resources

services.factory('Api', ['$resource',
 function($resource) {
  return {
     Recipe: $resource('/recipes/:id', {id: '@id'}),
     Users:  $resource('/users/:id', {id: '@id'}),
     Group:  $resource('/groups/:id', {id: '@id'})
  };
}]);

function myCtrl($scope, Api){
  $scope.recipe = Api.Recipe.get({id: 1});
  $scope.users = Api.Users.query();
  ...
}

答案 4 :(得分:0)

如果您的rest服务返回一个对象数组,则需要使用查询函数。

$scope.links = API.query(); // instead of API.get()

如果您在承诺返回时需要执行任何其他操作,请使用以下内容:

API.query().$promise.then(function(result){
     $scope.links = result;
     // any other operation related to the request here
});