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 :

Mise à jour de la vue lorsque le model est modifié


Sujet :

AngularJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Par défaut Mise à jour de la vue lorsque le model est modifié
    Bonjour à tous,


    je débute avec AngularJS,
    je pense utiliser cette API pour un de mes sites web, mais je rencontre une difficulté avec cette API.

    je m'explique :
    je possède un objet javascript 'listFiles' qui est une liste d'objets javaScript.

    j'arrive très bien à afficher ma liste d'objets sur ma page web (jusque là rien de bien compliquer).
    seulement mon objet 'listFiles' peut être amené à changer (par l'intermédiaire d'autres fonctions) et là je bloc, je ne voit pas comment mettre à jour ma vue.
    bien sûre je ne veux pas mettre ma vue à jour manuellement (avec l'appel d'un fonction lorsque la liste est modifiée) mais je voudrais que la vue se mette automatiquement à jour lorsque mon objet 'listFiles' est modifié.

    je fais donc appel à vous, car j'ai pas mal cherché et je n'ai pas encore trouvé de bonnes informations à ce sujet.
    est-il possible de faire cela avec Angularjs ?? (il me semble que oui puisque justement la force d'angularJS semble être la mise en place de modele MVC)
    si oui, pouvez-vous me donner des informations sur cette fonctionnalité, (mot clé ou autre qui puisse me permettre de mieux cibler mes recherches) ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour.

    Pour afficher ton objet, je suppose que tu utilises l'instruction ng-repeat ou ng-model
    En ce cas, si tu fais un appel ajax sur ton objet pour le mettre à jour, en théorie, Angular va remettre toute ta vue à jour tout seul, il n'y a rien à faire.

    J'utilise moi-mêm angular et c'est une tuerie, ça marche d'enfer , c'est trop bien et révolutionnaire.

  3. #3
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Par défaut
    Citation Envoyé par MoumouteMasters Voir le message
    Bonjour.

    Pour afficher ton objet, je suppose que tu utilises l'instruction ng-repeat ou ng-model
    En ce cas, si tu fais un appel ajax sur ton objet pour le mettre à jour, en théorie, Angular va remettre toute ta vue à jour tout seul, il n'y a rien à faire.

    J'utilise moi-mêm angular et c'est une tuerie, ça marche d'enfer , c'est trop bien et révolutionnaire.

    voici mon exemple :

    la partie html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <div ng-controller="FilesListCtrl as files">
    		<ul>
    			<li ng-repeat="file in files">
    				<span>{{file.name}}</span>
    				<p>{{file.size}}</p>
    				</li>
    		</ul>
     
    		<button id="addAction">click ici pour modifier ma variables</button>
    	</div>
    et la partie javascript :

    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
    var phonecatApp = angular.module('filesApp', []);
     
    var listFiles = [
    	{
    		'name': 'file 1',
       	 	'size': 43,
    	},
    	{
    		'name': 'file 2',
       	 	'size': 78,
    	}
    ];
     
     
     
    phonecatApp.controller('FilesListCtrl', function ($scope) {
     
    	$scope.files = listFiles;
     
    });

    dans cette exemple j'ai ajouté un bouton qui modifie ma variable listFiles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $("#addAction").click(function() {
    			console.log(listFiles);
    			console.log("add action called");
    			listFiles[0].name='file modified';
    			console.log(listFiles);
     
    		});
    (mais dans ma vraie application cette variables est modifié par un appel à l'API dropbox)

    j'utilise bien ng-repeat pour afficher ma liste mais lorsque ma varible est mise à jour (par le bouton dans cette exemple) ma vue n'est pas mise à jour.
    je precise que je ne souhaite pas utiliser ng-clik, l'action ici est juste pour ilustrer mon exemple, normalement ma varibles listFiles est modifié par le retour d'un appel à l'API dropbox)

  4. #4
    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
    je precise que je ne souhaite pas utiliser ng-clik
    Tu souhaites utiliser Angular, mais tu ne souhaites pas utiliser les fonctions d'Angular ???

    ng-click se serait chargé de faire la mise à jour automatique pour toi. Mais si tu ne veux pas l'utiliser pour une raison X ou Y, tu dois lancer la mise à jour manuellement avec un $scope.$apply:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $("#addAction").click(function() {
        $scope.$apply(function () {
    	console.log(listFiles);
    	console.log("add action called");
    	$scope.files[0].name='file modified';
    	console.log(listFiles);
        });
    });

  5. #5
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Par défaut
    Je ne souhaite pas utiliser nb-click car dans la réalité je n'ai pas de bouton pour modifier ma variable, comme expliqué précédemment, ma variable listFiles est modifiée par un appel à l'API dropbox (j'espère que mon explication est claire ).

  6. #6
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Par défaut
    pour plus de precision, voici mon code plus en détails:

    la vue html:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <div ng-app="dropboxFilesApp">
     
     
    					<div  ng-controller="DropboxFilesControl as files">
     
    						<ul>
    							<li ng-repeat="file in files">{{file.name}}</li>
    						</ul>
     
    					</div>
     
    				</div>

    la partie JS:

    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
    24
    25
    26
    27
    28
     
     
    var phonecatApp = angular.module('dropboxFilesApp', []);
     
     
    phonecatApp.controller('DropboxFilesControl', function ($scope) {
     
     
     
    	/*   dropbox initialization   */
    	var dropbox = new DropboxConnector('*************');
    	dropbox.init();
    	dropbox.checkAuthentication();
    	dropbox.authenticateClient();
     
     
    	dropbox.listContent(function(a){
    		console.log("a = "+a);
    		console.log("b = "+a.length);
     
    		$scope.$apply(function () {
    			$scope.files = a;	
    		});
     
     
    	});
     
    });

    cette version fonctionne correctement, mais si je n'utilise pas : $apply(...) la vue ne se met pas à jout automatiquement. Ors, je souhaiterait que ce soit le cas (j’aimerais ne pas avoir à faire appel à la fonction apply)
    débutant avec angularjs, est ce que j'utiliserais mal le concept ou alors y a t'il une architecture special a suivre dans le cas des appel asynchrone ?

Discussions similaires

  1. Régle de mise à jour d'une vue
    Par billybob2 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/06/2011, 15h50
  2. [MVC] Mise à jour de la vue par le modèle
    Par PanicKernel dans le forum MVC
    Réponses: 2
    Dernier message: 20/08/2007, 21h10
  3. "Mise à jour" d'une vue
    Par mostro_600 dans le forum SQL
    Réponses: 6
    Dernier message: 18/06/2007, 17h24
  4. [SWT] Mise à jour d'une vue
    Par Nikk0 dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 16/06/2007, 13h13
  5. [FORMS6] : mise à jour d'une vue
    Par gaultier dans le forum Forms
    Réponses: 13
    Dernier message: 03/07/2006, 12h15

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