2017-09-21 2 views
-3

今私はコントローラを持っており、次のようないくつかの関数を設定します。コールバック関数で変数data2を取得したい。しかし、今は未定義です。はコールバック関数の変数値の外に出ることができません

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

あなたがその変数にアクセスすることができないであろうことを示唆しているためにあなたのコード内では何もありません。 '' '.testing'''が実際に動いていますか? – jlogan

+0

AngularJSフレームワークでは、コードは生の 'setTimeout'の代わりに[$ timeout service](https://docs.angularjs.org/api/ng/service/$timeout)を使用する必要があります。好奇心をそそるのは、コントローラが '$ timeout'を注入するが、それを使わないということです。これを説明できますか? – georgeawg

+0

私はself.testing()でそれを実行しようとします。デバッグから、変数にアクセスすることはできません。 –

答えて

3

コードコールバックでdata2にアクセスすることができます。

実際に問題が再現されていることを確認してください。例を構成中に問題を誤って修正したが、もう一度テストしなかった場合は、他の人に手伝ってもらう前に知っておきたい。

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>

関連する問題