Partage
  • Partager sur Facebook
  • Partager sur Twitter

modifier le contenu d'une variable d'un controller

depuis une directive (angular 1.5)

Sujet résolu
    1 octobre 2016 à 4:07:34

    Bonjour,

    je voudrais modifier le contenu d'un variable dans le Controller parent depuis une Directive, la modification se fait bien, mais le contenu n'est pas pris en compte par la View. est ce que je dois utiliser $scope.$apply() ou $digest ?

    voici mon code http://plnkr.co/edit/zTKzofwjPfg9eXmgmi8s?p=preview

    fichier html

     <!DOCTYPE html>
    <html lang="en-US">
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>
    <script src="app.js"></script>
    <body>
    
    <div ng-app="app" ng-controller="parentController as parentCtrl">
      <h1> >> {{parentCtrl.myVar}}</h1>
      <p><my-directive attr-from-parent="parentCtrl.refreshMyVar" /></p>
    </div>
    
    </body>
    </html> 

    fichier javascript

    var app = angular.module('app', []);
    
    app.controller('parentController', function($scope) {
    	this.myVar = 'Hello from parent';
    
    	this.refreshMyVar = function(data) {
    		this.myVar = data.name;
    		console.log('>> this.myVar', this.myVar);
    	};
    });
    
    app.directive('myDirective', function() {
    	return {
    		restrict: 'E',
          	replace: true,
    		template: '<input type="file" />',
    		bindToController: {
            	attrFromParent: '='
          	},
          	controller: 'directiveController as directiveCtrl',
          	link: function(scope, el, attr, ctrl) {
    	        el.bind('change', function(e) {
    	          ctrl.onChange(e.target.files[0]);
    	        });
          	}
    	};
    });
    
    app.controller('directiveController', function() {
    	this.onChange = function(file) {
    		this.attrFromParent(file);
    	};
    });

    si vous avez d'autres idées plus propre que ce que j'ai fait n’hésitez pas a partager.

    merci d'avance.

    UPDATE

    voici comment j'ai resolu le problème le temps de trouver mieux

    this.refreshMyVar = data => {
    	this.myVar = data.name;
    	console.log('>> this.myVar', this);
    	$scope.$parent.$apply();
    };






    -
    Edité par CASAnova36295 1 octobre 2016 à 14:44:05

    • Partager sur Facebook
    • Partager sur Twitter
      1 octobre 2016 à 13:01:50

      Quand tu fais une requête AJAX, ta page est déjà entièrement chargé. Pour prendre en compte ta modification, qui elle se trouve coté serveur et non client, il faut soit recharger la page soit modifier ce que tu souhaites su ta page déjà charger en Javascript.
      • Partager sur Facebook
      • Partager sur Twitter
      $2b||!$2b

      modifier le contenu d'une variable d'un controller

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown