2016-06-21 12 views
0

Ich versuche, einen "Modell" -Dienst zu entwickeln, um meine freigegebenen Daten zwischen meinen Controllern synchronisiert zu halten. ich mit dieser Lösung endete:Besser organisieren AngularJS Modell-Service-Code

myApp.factory('UserService', function() { 
    return { 
    data: { 
     user: { 
     vm: { 
      firstName: '', 
      lastName: '' 
     }, 
     save: function() { 
      console.log("save user"); 
     } 
     }, 
     settings: { 
     vm: { 
      theme: '', 
      language: '', 
      currency: '' 
     }, 
     save: function() { 
      console.log("save user settings"); 
     } 
     }, 
     save: function() { 
     console.log("save all"); 
     } 
    } 
    }; 
}); 

(Geige hier, um besser zu verstehen, wie es funktioniert: http://jsfiddle.net/n36kpuf6/).

Ich denke nicht, dass es eine schlechte Lösung ist, es hält meinen HTML sauber und ich kann auf den Blick sehen, welche Funktionen ich in meinen Controllern verwenden kann, halten sie schlank; Ich bevorzuge es unter anderen Lösungen der Daten-Sharing basierend auf Ereignissen oder $ Scope ...

Gleichzeitig denke ich, dass, vielleicht, es ist ein bisschen verwirrt; Ich suchte also den John-Papa-Styleguide, wie ich ihn besser organisieren kann, aber ich kann keine Beispiele über diese Art von "Modell" -Dienstleistungen finden, nur einfache, auf Methoden basierende Dienste ... also dachte ich, dass ich vermisse etwas.

Kann mir bitte jemand Ratschläge geben, wie ich diesen Service besser organisieren kann?

+0

* "vielleicht ist es ein bisschen verwirrt" * ... warum? Controller sollten schlank sein und Services sollten so viel wie möglich von der Geschäftslogik haben. – charlietfl

+0

gut .. Ich habe Modell und Funktionen in der gleichen Struktur; Wenn meine Funktionen mit "echtem" Code gefüllt wären, würden sie lang und die ganze Struktur nicht so lesbar. – wizzy

+1

Schreiben Sie die Funktionen als benannte Funktionen unterhalb des Objekts und übergeben Sie einfach Funktionsreferenzen an Ihr 'data' Objekt – charlietfl

Antwort

0

Warum putting Funktion in Ihrem Objekt? Warum holen Sie nicht nur ein sauberes Objekt:

myApp.factory('UserService', function() { 
    return { 
    data: { 
     user: { 
      firstName: '', 
      lastName: '' 
     }, 
     settings: { 
      theme: '', 
      language: '', 
      currency: '' 
     } 
    } 
    }; 
}); 
+0

weil immer, wenn ich den Service in der Steuerung erwerbe ich das Modell selbst und seine Funktionen zum Spielen bekommen. zum Beispiel ... Ich bekomme die Benutzerdaten und ihre Funktion, um sie im Backend zu speichern. – wizzy

0

ich mit dieser Lösung endete:

myApp.factory('UserService', function() { 
    var service = { 
     user: { 
     vm: {}, 
     save: saveUser 
     }, 
     settings: { 
     vm: {}, 
     save: saveSettings 
     }, 
     save: saveAll 
    }; 

    return service; 

    function saveUser() { 
    console.log("save user"); 
    console.log(service.user.vm); 
    } 

    function saveSettings() { 
    console.log("save user settings"); 
    console.log(service.settings.vm); 
    } 

    function saveAll() { 
    console.log("save all"); 
    console.log(service); 
    } 
}); 

(Geige hier: http://jsfiddle.net/tudev0xc/)

Ich denke, es ist vielseitig und lesbar bleibt.