2016-03-31 9 views
0

Ich spiele mit angularjsservices und factories. Ich habe eine Fabrik BookFactory wie folgt genannt erstellt:Angularjs: Erreiche die gleiche Struktur für den Service als Factory

// Code goes here 

app 
    .factory('BootFactory', function() { 
    var bookFactory; 

    function add() { 

    } 

    function remove() { 

    } 

    function getAll() { 

    } 
    bookFactory = { 
     add: add, 
     remove: remove, 
     getAll: getAll 
    } 
    return bookFactory; 

    }); 

Und ein BookService wie folgt:

app.service('BookService', function() { 

     var bookService; 

     function add() { 

     } 

     function remove() { 

     } 

     function getAll() { 

     } 

     /* 
     It throws: 
     Uncaught ReferenceError: Invalid left-hand side in assignment. 

     How can I achieve the same structure with the services which I have used in factories. 

     this = { 
      add: add, 
      remove: remove, 
      getAll: getAll 
     }; 

     */ 

     //Do I have to add all methods like this 
     this.add=add; 
     this.remove=remove; 
     this.getAll=getgAll; 

     //Or there's any other better way to achieve it 

     }); 

Was soll ich tun, um die ich die die Struktur konsistent dh halten halten will ich will etwas wollen so für die Fabrik und Dienstleistungen:

Im Falle der Fabrik funktioniert es gut. Aber im Servicefall kann ich das nicht tun. Ursache Service arbeitet mit this und ich kann das nicht tun:

/* 
      It throws: 
      Uncaught ReferenceError: Invalid left-hand side in assignment. 

      How can I achieve the same structure with the services which I have used in factories. 

      this = { 
       add: add, 
       remove: remove, 
       getAll: getAll 
      }; 

      */ 

Was ich denke, ist zu tun:

//Do I have to add all methods like this 
      this.add=add; 
      this.remove=remove; 
      this.getAll=getgAll; 

      //Or there's any other better way to achieve it 

Gibt es einen besseren Weg, dies zu tun? Hier ist die .

Antwort

2

Sie können Bookservice wie schaffen as-

app.service('BookService', function() { 
    return { 
      add:add, 
      remove:remove, 
      getAll:getAll 
     }; 

    function add() { 

     } 

     function remove() { 

     } 

     function getAll() { 

     } 

    }); 
+0

Wir sollten nichts mit der Service-Funktion zurückgeben, da es die Konstruktorfunktion ist. –

+0

Yeap, richtig. Ein Service ist eine Konstruktorfunktion, die uns jedoch nicht daran hindert, zusätzliche Arbeit zu leisten und Objektliterale zurückzugeben. Tatsächlich können Konstruktorfunktionen in JavaScript zurückgeben, was sie wollen. So können wir unseren Service-Code nehmen und schreiben es auf eine Weise, dass es im Grunde genau das Gleiche wie unsere Fabrik tut –

+1

@HiteshKumar Lesen Sie dies bitte http://blog.thoughtram.io/angular/2015/07/07/service -vs-factory-einmal und für alle.html –

1

Sie etwas tun können:

app.service('BookService', function() { 
    function add() { 

    } 

    function remove() { 

    } 

    function getAll() { 

    } 

    var bookService = { 
     add: add, 
     remove: remove, 
     getAll: getAll 
    }; 

    return bookService; 
    }); 

Angular kümmert sich nicht wirklich das, was Sie da kehrt zurück. Bei Factory vs Service geht es nur darum, wie es aufgerufen wird, factory heißt so: factory() und service wie folgt: new service(). In JS kann der Konstruktor alles zurückgeben, was Sie möchten.

1

Fabriken und Dienstleistungen sind nur zwei leicht unterschiedliche Möglichkeiten zum Erstellen einer Serviceobjekt-Instanz.

Die Factory-Funktion gibt die Instanz selbst zurück.

Die Service-Funktion ist eine Konstruktorfunktion und wird mit new (oder ähnlichem) verwendet, um die Instanz zu erstellen. Konstruktorfunktionen in JS können die Objektinstanz zurückgeben, die direkt instanziiert wurde (anstelle des Standards this, read more).

Dies sollten Sie lassen dies zu tun:

.service('BookService', function() { 
    var bookService; 

    function add() {} 

    function remove() {} 

    function getAll() {} 

    bookService = { 
     add: add, 
     remove: remove, 
     getAll: getAll 
    } 
    return bookService; 
    }) 

ja Also, factory und service genau die gleiche Art und Weise funktionieren kann, weil dieser Marotte JS.

Ich weiß nicht wirklich, warum Sie das gleiche Rezept für beide haben möchten, da semantisch sie das gleiche tun, warum nicht einfach alle Dienste mit einem bestimmten in diesem Fall erstellen?