2016-06-16 16 views
1

Hallo SO eckige Gemeinschaft!Brauchen Sie Hilfe auf Angular Factory

ich sehr verwirrt bin, ich glaube, ich verstehe haben die Fabrik Zweck und Konzept, scheint aber nicht ...

Hier ist mein Problem (sicherlich einfacher für Sie):

ich verwenden möchten mein REST API (funktionierend) mit Winkel- und .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> 

Problem ... 2 Stunden ich die Angular API Beratung bin und keine Lösungen:/

Bitte helfen Sie mir ich Zeit verschwenden: '(

\\\\ SOLUTION ////

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; 
    }); 
}]); 

Dank @dfsq help :)

+0

Was ist es funktioniert nicht? Erhalten Sie Fehlermeldungen? Wird eine Netzwerkanfrage gestellt? Sie haben: 1) eine Fabrik, 2) eine Verwendung von $ Ressourcenservice, 3) eine Ansicht mit Ausdrucksbindungen. Welches Bit funktioniert nicht? – Snixtor

+0

ich dieses auf meiner Seite: ** MEAN Stapel urlShortener ** {{link.itemId}} -> {{}} link.url – SherlockStd

+0

Sind Sie mit dem Browser * Konsole vertraut *. Dort werden Fehlermeldungen angezeigt. Hier können Sie während der JavaScript-Ausführung Ausgaben ausgeben, um die Diagnose zu erleichtern.Du musst dich wirklich damit vertraut machen, wenn du mit dem JavaScript-Debugging weiterkommst. https://developer.chrome.com/devtools/docs/console https://developer.mozilla.org/en/docs/Tools/Web_Console – Snixtor

Antwort

1

Sie können nicht Ordnen Sie $ source instance nur $ scope.links zu, wenn das zugrunde liegende Versprechen aufgelöst wird:

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

Ich verstehe nicht, was es ist sollte, aber es funktioniert nicht :( – SherlockStd

+0

Was du nicht verstehst? Nur um sicherzustellen, dass Sie Ihre Syntaxfehler im Code (Klammern) behoben? Dann habe ich das Snippet, das Sie verwenden müssen. – dfsq

+0

Ist da Jeder Fehler in meiner Fabrik? Ich ersetzte meine gesamte Controller mit Ihrem Schnipsel:/ – SherlockStd

0

wenn Sie möchten api Anfragen tun, verwenden Sie $http

dies ist ein Stück Code, den ich in meiner Anwendung verwenden:

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

ja das ist, wo ich beginnen, aber beziehen sich auf die Angular $ http API, ** Für eine höhere Abstraktionsebene, bitte überprüfen Sie die $ Ressourcen-Service. ** ... – SherlockStd

+0

Ich will es nur sauber machen ^^ – SherlockStd

0

Sie müssen "API" in Ihren Controller injizieren.

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

Ist das wonach Sie suchen? 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

Wenn Ihr Rest Dienst eine Reihe von Objekten zurückgibt müssen Sie Query-Funktion verwenden.

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

Wenn Sie etwas anderes tun, wenn die Versprechen kehrt so etwas wie folgt verwenden:

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