2016-06-16 4 views
1

Привет, Угловое сообщество!Нужна помощь по Угловой Фабрике

Я очень смущен, я думаю, что я понимаю, заводскую цель и концепцию, но, кажется, не ...

Вот моя проблема (конечно, просто для вас):

Я хочу использовать мой REST API (работает отлично) с помощью угловых и .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 часа я консультационные Угловая 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 :)

+0

Что о нем не работает? Вы получаете сообщения об ошибках? Выполняется ли запрос сети? Вы получили: 1) завод, 2) использование $ resource service, 3) представление с привязками выражений. Какой бит не работает? – Snixtor

+0

я получаю это на моей странице: ** MEAN Stack urlShortener ** {{link.itemId}} -> {{}} link.url – SherlockStd

+0

Вы знакомы с браузером * консоли *. Здесь вы увидите сообщения об ошибках. Здесь вы можете написать вывод во время выполнения JavaScript, чтобы помочь диагностировать вещи.Вы действительно ** должны ** познакомиться с ним, если вы собираетесь где угодно с отладкой JavaScript. https://developer.chrome.com/devtools/docs/console https://developer.mozilla.org/en/docs/Tools/Web_Console – Snixtor

ответ

1

Вы не можете просто присвойте экземпляру $ resource значение $ scope.links, вам нужно сделать это, когда основные обещания разрешаются:

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

Я не понимаю, что это предположительно, но он не работает :( – SherlockStd

+0

Что вы не понимаете? Чтобы убедиться, что вы исправили свои синтаксические ошибки в коде (скобки)? Тогда я разместил фрагмент, который вам нужно использовать. – dfsq

+0

любая ошибка на моей фабрике? Я заменил весь мой контроллер своим фрагментом:/ – SherlockStd

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 
     } 

    } 

} 
+0

да, это где я start, но ссылаясь на Angular $ http API, ** Для более высокого уровня абстракции, пожалуйста, проверьте $ resource service. ** ... – SherlockStd

+0

Я просто хочу очистить ^^ – SherlockStd

0

Вы должны ввести «API» в свой контроллер.

app.controller('GetAll', function ($scope, API) { 
    $scope.links = API.get(); 
}); 
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(); 
    ... 
} 
0

Если служба остальное возвращает массив объектов, которые необходимо использовать функцию запроса.

$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 
}); 
Смежные вопросы