2016-06-01 3 views
-1

Я пытаюсь получить доступ к переменной в одной функции из другой функции. Мой код похож на этот код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); 
    } 
}]); 

Но я получаю «неопределенный» в своем журнале. Как я могу это исправить?

+0

использования сервис, поэтому почему сервис был создан – mpgn

+1

nooo необходимо использовать службу внутри одного и того же контроллера. это излишество. var более чем достаточно – AlainIb

+0

вы уверены, что вы вызываете функцию $ scope.one? вставьте в него журнал – AlainIb

ответ

-1

Вместо «результата» изменить его на «$ scope.result»

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

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

    $scope.result = 'No'; 
} 

Другое дело, чтобы упомянуть в вашей проблеме есть вы должны убедиться, что проблема одна была сделана до того, как результат фактически возвращается , Можете ли вы опубликовать весь свой код, чтобы мы могли более внимательно посмотреть? Или попытаться дать демо в шлепнуть или jsfiddle

+1

, вам не обязательно это делать. $ scope предназначен для обмена данными с представлением. его переменная result объявлена ​​вне функции, поэтому все в порядке. Я думаю, что функция никогда не называется – AlainIb

+0

Да, я согласен, но использую $ scope.результат сделает его жизнь намного легче, особенно когда он просто хочет вернуть результаты. Ему даже не понадобится второй результат, если он применил $ scope –

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

    Update: Использование Обещания

Ваша $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     
    }); 
} 
+0

. Я думаю, что причина может быть первой. Если это так, как я могу это исправить? – CraZyDroiD

+0

Мне жаль, что я не понял. вы можете помочь – CraZyDroiD

+0

@CraZyDroiD: дайте мне минуту ... – Thalaivar

0

Вы должны прикрепить переменную сферы:

var $scope.result = ''; 

и всегда относятся к ней таким образом, внутри, если п:

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

и conosole.log:

console.log($scope.result); 
Смежные вопросы