2017-09-21 1 views
-3

Maintenant, j'ai un contrôleur et définir certaines fonctions comme suit. Je veux obtenir la variable data2 dans la fonction de rappel. Mais maintenant c'est indéfini.ne peut pas obtenir la valeur variable externe dans la fonction de rappel

var searchApp = angular.module('reveal.searchUI'); 
 

 
searchApp.controller('SearchController', ['$rootScope','$scope','$q','$http','$timeout','$window', 
 
    '$i18next', '$filter','$sanitize', '$cookies', 
 
    'emcui.EventBus','RemoteUrl',"Reveal","Cache","AUTH_EVENTS", 
 
    function($rootScope, $scope, $q, $http, $timeout, $window, $i18next, 
 
      $filter, $sanitize,$cookies, eventBus,remoteUrlProvider, reveal, 
 
      cache, AUTH_EVENTS){ 
 
     var self = this; 
 
     var data1 = "data1"; 
 
     this.testing = function(){ 
 
      var data2 = "data2"; 
 
      setTimeout(function(){ 
 
      //need to get the variable data2 
 
      },1000); 
 
     }; 
 
    }]);

+4

Il n'y a rien dans votre code à penser que vous ne seriez pas en mesure d'accéder à cette variable. Êtes-vous sûr que '' '.testing''' est en cours d'exécution? – jlogan

+0

Avec le framework AngularJS, le code devrait utiliser le [$ timeout service] (https://docs.angularjs.org/api/ng/service/$timeout) au lieu du 'setTimeout' brut. Ce qui est curieux, c'est que le contrôleur injecte '$ timeout' mais ne l'utilise pas. Pouvez-vous expliquer cela? – georgeawg

+0

J'essaie de l'exécuter par self.testing(). À partir du débogage, la variable n'est pas accessible. –

Répondre

3

Le code est en mesure d'accéder data2 dans le rappel.

Assurez-vous que l'exemple reproduit réellement le problème! Si vous avez corrigé le problème par inadvertance lors de la composition de l'exemple mais que vous ne l'avez pas testé à nouveau, vous devez le savoir avant de demander à quelqu'un d'autre de vous aider.

The DEMO

angular.module("app",[]) 
 
.controller('SearchController', [ 
 
    function(){ 
 
     var self = this; 
 
     var data1 = "data1"; 
 
     this.testing = function(){ 
 
      var data2 = "data2"; 
 
      setTimeout(function(){ 
 
      //need to get the variable data2 
 
      console.log(data2); 
 
      },1000); 
 
     }; 
 
}]);
<script src="//unpkg.com/angular/angular.js"></script> 
 
    <body ng-app="app" ng-controller="SearchController as vm"> 
 
    <button ng-click="vm.testing()">Click me</button> 
 
    </body>