如何在Angular中使用http.then之外的值

时间:2017-03-22 07:05:01

标签: angularjs angularjs-scope

我的控制器代码是: -

var app = angular.module('myApp');
app.controller('myCtrl', function() {
    $scope.year = "1350";
    $scope.ord1 = "";
    $scope.s1t1 = function() {
        $http({
            url: 's1t1.json',
            method: 'GET'
        }).then(function(response) {
            $scope.set = response.data;
            //console.log($scope.set);
            $scope.obj = $scope.set.find(o => o.year === $scope.year);
            $scope.ord1 = $scope.obj.ordinal;
        });
    }
    alert($scope.ord1);
});

我在$scope.ord1中得到了一个像44144的值。我需要在s1t1函数之外的控制器中使用它。我用警报代表它。我也尝试使用$rootScope,但结果是一样的。

3 个答案:

答案 0 :(得分:1)

在代码中不会按顺序(同步)执行任务。 $http是异步的,这意味着调用function,发送请求但您的代码不会等待响应,而在function调用之后您没有值< EM>尚未。您需要在then

中放置取决于回调内部响应的代码

答案 1 :(得分:0)

在then函数中

alert,它将花费少量时间但你会得到一个值。调用要使用该值的函数。

var app = angular.module('myApp');
app.controller('myCtrl', function() {
 $scope.year = "1350";
 $scope.ord1 = "";
 $scope.s1t1 = function() {
    $http({
        url: 's1t1.json',
        method: 'GET'
    }).then(function(response) {
        $scope.set = response.data;
        //console.log($scope.set);
        $scope.obj = $scope.set.find(o => o.year === $scope.year);
        $scope.ord1 = $scope.obj.ordinal;
        alert($scope.ord1);

       // Call a function where you want to use the value
       myFunctionTousevalue();
    });
 }
  var myFunctionTousevalue = function () {
    alert('Using Value: '+$scope.ord1);
  }
});

答案 2 :(得分:0)

使用超时功能

        var app = angular.module('myApp');
        app.controller('myCtrl', function($timeout) {
         $scope.year = "1350";
         $scope.ord1 = "";
         $scope.s1t1 = function() {
            $http({
                url: 's1t1.json',
                method: 'GET'
            }).then(function(response) {
                $scope.set = response.data;
                //console.log($scope.set);
                $scope.obj = $scope.set.find(o => o.year === $scope.year);
                $scope.ord1 = $scope.obj.ordinal;

               // Call a function in timeout
               $timeout(funuction(){
                    myFunctionTousevalue();        
           },100)

            });
         }
          var myFunctionTousevalue = function () {
            alert('Using Value: '+$scope.ord1);
          }
        });