angular $ scope在角度控制器

时间:2015-07-27 22:23:59

标签: javascript angularjs

介绍: 我在$ http方法中有一个问题返回值,我知道如何在$ http.post和$ http.get方法中运行$ http,我无法在调用我工厂的函数之外返回值。

我需要在控制器函数之外使用$ scope.historias值。

My Angular Factory: 第一工厂:

mediperbaricaApp.factory('listarTratamientos',['$http','$location','$q', 
                                                function($http, $location, $q){
    var urlBase = host + 'index.php/';
    var service = {};
    console.log('DEBUG = entramos');

    return {
        response : function(response){
            return $http({
                url : (urlBase + 'tratamientos/getTratamientos'),
                method : 'GET' 
            })
        }
    }

}]);

第二工厂:

mediperbaricaApp.factory('services', [ '$http' ,'$location', function(
                                                    $http, $location){
  var urlBase = host + 'index.php/';
  var service = {};
  //listado de historias para el autocoplete del form
  service.getHistorias = function(callback){
    console.log('[DEBUG] FAC Listar Historias');
    $http.get(urlBase + 'historias/getHistoria').
    success(function(response){
        return callback(response);
    }).
    error(function(response){
        alert('Lo sentimos!, No se puede recuperar los datos, ' +
                                                      ' intente mas tarde :(');
    })
  };

  return service;
}]);

我的Angular Controller Controller,使用两个最后的工厂,我得到相同的结果

mediperbaricaApp.controller('editController',function($scope,listarTratamientos,
                                         $location,$routeParams, services){
    console.log('[DEBUG] CTRL editar tratamientos');
    //use first factory
    $scope.datos = {};
    services.getHistorias(function(response){
        $scope.datos = response.data; // output array with data :)
    })
    //the data no exist in this place.
    console.dir($scope.datos); //$scope.datos lost data :(

    //use second factory
    $scope.midata = {};
    listarTratamientos.response().success(function(data){
        $scope.midata = data;
        console.dir($scope.midata);  // output array with data :)
    });
    //data not exist in this place i dont understand
    console.dir($scope.midata); //$scope.datos lost data :(

谢谢你的帮助! ATT。爱德华

1 个答案:

答案 0 :(得分:1)

所以在这部分你有一个回调函数,你试图访问它下面的代码中的值:

services.getHistorias(function(response){
        $scope.datos = response.data; // output array with data :)
    })
    //the data no exist in this place.
    console.dir($scope.datos); //$scope.datos lost data output undefined variable :(

问题是在此代码块之后稍微执行了回调函数,因此需要从该回调中调用您对该数据执行的所有操作,例如:

services.getHistorias(function(response){
        $scope.datos = response.data; // output array with data :)
        myFunction();
    })
...

function myFunction() {
    console.dir($scope.datos); //$scope.datos now available :)
}

您的其他代码块也是如此。

请记住关于回调/异步函数:只是因为一行代码正好在另一行代码下面 - 这并不意味着它们将按照该顺序执行

我现在将向您展示两个非常简单的示例 - 一个错误的示例(就像您所做的那样),以及一个好的示例,使用setTimeout来模拟异步调用:

错误的

var data;

setTimeout(function() {
  data = 'I will not be available!';
}, 100);

alert(data); // undefined

正确的

var data;

setTimeout(function() {
  data = 'Que suerte!';
  showAlert();
}, 100);

function showAlert(){
  alert(data); // all good!
}