IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AngularJS Discussion :

Bestpractice, code réutilisation (DRY)


Sujet :

AngularJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2012
    Messages : 23
    Par défaut Bestpractice, code réutilisation (DRY)
    Bonjour,
    dans un app AngularJS, a de nombreux endroits je dois soit extraire ou inserer de nombreuses information de profil utilisateur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $scope.checkPros = function() {
                    fieldValuesService.firstName = $scope.firstName;
                    fieldValuesService.lastName = $scope.lastName;
                    fieldValuesService.email = $scope.email;
                    fieldValuesService.phone = $scope.phone;
                    fieldValuesService.fax = $scope.fax;
                    fieldValuesService.company = $scope.company;
                    fieldValuesService.category = $scope.category;
                    fieldValuesService.subCat = $scope.subCat;
                    fieldValuesService.street = $scope.street;
                    fieldValuesService.zip = $scope.zip;
                    fieldValuesService.city = $scope.city;
                    fieldValuesService.state = $scope.state;
                    fieldValuesService.country = $scope.country;
                    fieldValuesService.notes = $scope.notes;
    Vous voyez que dans ce cas, je prend les infos rentrés dans un formulaire, et je les stoque dans un service. Il y a aussi l'autre cas de figure: prendre les info du service et les injecter dans un formulaire ou autre. A chaque fois j'ai un code similaire ce qui est vraiment ennuyeux quand je dois par exemple rajouter un nouveau champ dans le formulaire: il faut que je retrouve tous les endroits ou il y a ce code, et l'inserer.
    Comment feriez vous pour que ces champs formulaire puissent etres inscrits dans le code à un endroit unique, et reutilisés ensuite plus simplement, que ce soit pour y ecrire, lire, ou les vider ?

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Salut,

    Je rouille un peu en Angular, mais pourquoi ne pas placer le service dans le scope parent de l'application ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rootScope.fieldValuesService

  3. #3
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Citation Envoyé par webkoros Voir le message
    Comment feriez vous pour que ces champs formulaire puissent etres inscrits dans le code à un endroit unique, et reutilisés ensuite plus simplement, que ce soit pour y ecrire, lire, ou les vider ?
    Stockes l'instance de ton service dans le scope au lieu de stocker chaque variable, ça sera plus lisible et plus rapide (un seul watcher). En d'autres termes stocke l'objet plutôt que de faire valeur par valeur.

    Ensuite dans tes vues tu appelles l'instance et ton membre au lieu d'appeler directement le membre. (monIstance.monMembre au lieu de monMembre)

    C'est donc dans tes vues que tu définis la lecture/écriture ce qui est beaucoup plus cohérent par rapport à la philosophie du framework.

    @SylvainPV

    Pas terrible comme pratique, cela signifie que tous les scopes de l'application auront accès à ce service. De plus je ne vois pas en quoi cela résout sa problématique.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 36
    Par défaut
    une implementation possible du post Marco64

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    module.factory('fieldService',[function () {
    return {
     valuate: function (obj) {
    /*il suffira de changer le code ici, possibilité aussi d'utiliser Object.getOwnPropertyNames(obj) au lieu de lister tous les champs */
        this.firstName = obj.firstName;
        this.lastName = obj.lastName;
        this.email = obj.email;
        this.phone = obj.phone;
        this.fax = obj.fax;
        this.company = obj.company;
        this.category = obj.category;
        this.subCat = obj.subCat;
        this.street = obj.street;
        this.zip = obj.zip;
        this.city = obj.city;
        this.state = obj.state;
        this.country = obj.country;
        this.notes = obj.notes;
        return this;
    }
    }]);
    /*utilisation: passser un objet a convertir au lieu de passer le scope*/
    $scope.myOtherStuff = fieldService.valuate($scope.myForm);

  5. #5
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    En plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    module.factory('fieldService',[function () {
    return {
     valuate: function (obj) {
     
        this.obj = obj;
     
        return this;
    }
    }]);

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/11/2010, 15h28
  2. Réponses: 2
    Dernier message: 13/09/2009, 15h01
  3. Rendre le code réutilisable en Assembleur
    Par ToutEnMasm dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 22/06/2009, 10h25
  4. Du code réutilisable ?
    Par tintin72 dans le forum C
    Réponses: 29
    Dernier message: 24/07/2006, 02h29
  5. [Juridique] Comment réutiliser le code source d'une classe ?
    Par mathieu dans le forum Général Java
    Réponses: 8
    Dernier message: 17/05/2004, 13h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo