Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angularjs从另一个函数访问一个函数中的变量_Javascript_Angularjs - Fatal编程技术网

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

Javascript Angularjs从另一个函数访问一个函数中的变量,javascript,angularjs,Javascript,Angularjs,我试图从另一个函数访问一个函数中的变量。我的代码与此类似 注意:我在代码的其他部分获得submitData.alcohold的值 angular.module('app',['ui.router']) .controller('infoCtrl',['$scope','$http',functioninfoCtrl($scope,$http){ var result; $scope.one = function(){ if(submitData.alcohol=='

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

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

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);
    }
}]);

但我的日志中有一个“未定义”。如何修复此问题?

将其改为“$scope.result”,而不是“result”

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

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

     $scope.result = 'No';
}

在问题中要提到的另一件事是,在返回结果之前,必须确保问题1已经完成。你能把你的全部代码都贴出来,让我们仔细看看吗?或者尝试在plunk或JSFIDLE中进行演示,可能有两个原因:

  • 您的
    $scope.one
    可能是异步函数,因此在
    $scope.one
    完成之前,您的
    控制台.log(结果)
    未定义打印
  • 您的函数
    $scope.one
    从未被调用

    var result = "";    
    $scope.one = function() {    
        if (submitData.alcohol == '1') {    
            result = 'Yes';
        } else {
            result = 'No';
        }        
    };
    
    $scope.two = function() {    
        $scope.one();
        console.log(result);    
    }
    
    更新:使用承诺

  • 您的
    $scope.one
    函数在此

    $scope.one = function(param) {
      var deferred = $q.defer();
    
        YourAPICall(param, function(data) {            
          deferred.resolve(data);
        });    
       return deferred.promise;
    };
    
     $scope.two = function(){
         $scope.one(param).then(function (data) {
             console.log("data", data);//check for your condition here                  
         });
     }  
    
    您的
    $scope.two在此处运行

    $scope.one = function(param) {
      var deferred = $q.defer();
    
        YourAPICall(param, function(data) {            
          deferred.resolve(data);
        });    
       return deferred.promise;
    };
    
     $scope.two = function(){
         $scope.one(param).then(function (data) {
             console.log("data", data);//check for your condition here                  
         });
     }  
    

    您需要将变量附加到作用域:

    var $scope.result = '';
    
    并始终在if子句中以这种方式引用:

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

    console.log($scope.result);
    

    使用服务,这就是创建服务的原因。无需在同一控制器内使用服务。这太过分了。一个变量不止一个您确定要调用$scope.one函数吗?在它里面放一个日志什么是submitData?在当前发布代码的上下文中,它是未定义的。不是结果。@您能确认吗?再次记录值,就好像它有依赖项一样,然后你必须注入它。你不必这样做$作用域用于与视图共享数据。他的结果变量是在函数外声明的,所以没有问题。我认为这个函数永远不会被调用。啊,我同意,但是使用$scope.result会让他的生活变得更轻松,尤其是当他只想返回结果时。如果他申请的话,他甚至不需要第二个结果。我想原因可能是第一个。。如果是这样的话,我该如何解决这个问题?很抱歉我不明白。你能帮忙吗?你的API应该是什么?你正在进行的@CrazHydroid的API调用,或者你能发布完整的实际代码来查看吗