2016-07-20 1 views
0

Ich bin sehr neu zu eckig, ich möchte die Fabrikmethode verstehen.Angularjs - Was ist der richtige Weg, `Factory` zu erstellen und wie man sie benutzt?

Ich habe versucht, eine Factory-Methode zu meiner App mit verschiedenen Möglichkeiten zu erstellen. aber nichts funktioniert für mich - warum?

auch die richtige Methode zum Erstellen von Factory-Methoden und haben wir mehrere Möglichkeiten, Factory-Methoden zu erstellen? - Wenn ja, bitte mit ihren Vor- und Nachteilen erklären?

hier ist mein Versuch:

var app = angular.module('MyApp', ['authService' ]); 

app.controller('MainCtrl', function($scope) { 
    $scope.name = 'World'; 
}); 

//type 1 
app.factory('appFactory', function(){ 
    console.log(" called from app factory") 
}) 

//type 2 
angular.module('MyApp') 
.factory('myFactory', function(){ 

    console.log("called from factory"); 

}) 

//type 3 
angular.module("authService", []) 

.factory("Auth", function($http, $q, AuthToken) { 

    console.log(" i am called from auth factory") 


}) 

Live Demo

Antwort

2

ist hier a forked version Ihrer Plunker

  • Ihr Werk muss etwas zurückgeben. Überprüfen Sie die Rückgabebestätigung im Behälter
  • Sie sollten das Werk in Ihrem Controller MainCtrl für die Fabrik initialisiert werden, um initialisiert zu werden. Deshalb wurden die console.log s nicht gedruckt.

Optimale Nutzung der Fabrik/Dienstleistungen

Nach dem weit verbreiteten sind John Papa's angular 1 style guide unterhalb der optimale Ansatz. Lesen Sie mehr über Winkel Leitlinien für die style guide

(function() { 
'use strict'; 

angular 
    .module('app') 
    .factory('logger', logger); 

function logger() { } 
})(); 
1

Mit Fabriken bekommen Sie können Objekte erstellen . Ein einfaches Beispiel, das Sie ist dies loszulegen kann helfen: es in meinem Controller

angular 
.module('myApp', []) 
.factory('Post', ['$http', function($http) { 
    var service = { 
     all: all, 
     get: get 
    }; 

    return service; 

    function all() { 
     return $http 
      .get('api/posts/') 
      .then(function(response){ 
       return response.data; 
      }); 
     } 
    } 

    function get(id) { 
     return $http 
      .get('api/posts/' + id); 
      .then(function(response){ 
       return response.data; 
      }); 
     } 
    } 
}]) 
.controller('PostsController', ['Post', function(Post){ 
    var self = this; 
    self.posts = Posts.get(); 
}]); 

So lese ich einfach injizieren und dann mit Leichtigkeit seine Methoden aufrufen. Auf diese Weise gibt es eine Trennung von Bedenken und Sie können all diese Logik von Controllern und Komponenten fernhalten. Es gibt einen großen Artikel über Fabriken und Dienstleistungen auch here

0

Fabrik wird verwendet, um den Dienst zu erstellen. Dienstleistungen sind Java-Script-Funktion, sobald wir die Fabrik definieren, können wir es überall in der Anwendung verwenden. Beispiel:

<div ng-app="myApp" ng-controller="Ctrl"> 
<h3>{{hello}}</h3> 
</div> 
<script> 
var app = angular.module('myApp', []); 
app.factory("test",function(){ 
    var fact={}  //Creating Object 
    fact.love=function(){ //Access love method through the fact object 
     var serve="This is test for factory"; 
     return serve; 
    } 
    return fact;   //return object 
}) 
app.controller('Ctrl', function($scope, test) { 
    $scope.hello=test.love(); //assign the test factory function in ctrler 
}); 
</script> 
Verwandte Themen