Angularjs从另一个函数访问一个函数中的变量

时间:2016-06-01 09:25:53

标签: javascript angularjs

我正在尝试从另一个函数访问一个函数中的变量。我的代码与此类似

注意:我在代码的其他部分获得了submitData.alcohol的值。

angular.module('app',['ui.router'])
 .controller('infoCtrl',['$scope','$http',functioninfoCtrl($scope,$http){
    var result;
    $scope.one = function(){
      if(submitData.alcohol=='1'){
        result = 'Yes';
      }else{
        result = 'No';
       }
    };

    $scope.two = function(){
       console.log(result);
    }
}]);

但是我的日志中有一个'未定义'。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

可能有几个原因:

  1. 您的$scope.one可能是异步功能,因此在console.log(result)完成之前,您的$scope.one未定义。
  2. 您的函数$scope.one从未被调用过吗?

    var result = "";    
    $scope.one = function() {    
        if (submitData.alcohol == '1') {    
            result = 'Yes';
        } else {
            result = 'No';
        }        
    };
    
    $scope.two = function() {    
        $scope.one();
        console.log(result);    
    }
    

    更新:使用承诺

  3. 您的$scope.one功能

    $scope.one = function(param) {
      var deferred = $q.defer();
    
        YourAPICall(param, function(data) {            
          deferred.resolve(data);
        });    
       return deferred.promise;
    };
    

    您的$scope.two功能

     $scope.two = function(){
         $scope.one(param).then(function (data) {
             console.log("data", data);//check for your condition here                  
         });
     }  
    

答案 1 :(得分:0)

您需要将变量附加到范围:

var $scope.result = '';

并始终以这种方式引用它,在if子句中:

if(submitData.alcohol=='1') {
    $scope.result = 'Yes';
} else {
    $scope.result = 'No';
}

和conosole.log:

console.log($scope.result);

答案 2 :(得分:-1)

而不是'result'将其更改为'$ scope.result'

if (submitData.alcohol == '1') {

     $scope.result = 'Yes';
} else {

     $scope.result = 'No';
}

在您的问题中要提到的另一件事是您必须确保在实际返回结果之前已完成问题。你可以发布你的整个代码,所以我们可以仔细看看吗?或者尝试在plunk或jsfiddle中进行演示