2015-05-20 30 views
1

我尝试使用工厂内的$ scope来存储一个值,但是我不能。回调函数里面的变量angularjs

我也尝试将值推入数组,它不起作用。

我只是想将一个回调值复制到一个变量中以从工厂返回它。

这是一个示例:

var cpy = {}; 
$http.get('/api/things/') 
.success(function (data){ 
      cpy = data; 
     }) 
     .error(function (err){ 

     }); 

console.log(cpy); 

感谢您的帮助。

+0

你必须使用promsie。 https://docs.angularjs.org/api/ng/service/$q – user3227295

+0

@ user3227295 $ http已经返回一个承诺。 – Okazari

+0

在回调函数之前触发console.log函数 – user3227295

回答

1

这几乎是你所需要的。

你的工厂应该像:

var getCopy = function(){ 
    return $http.get('/api/things/'); 
} 

而在你的控制器,你得到这样的:

myfactory.getCopy().success(function(data){ 
    $scope.myscopedvar = data; 
}); 

如果你想在你的范围有些结合,它会始终在做控制器。如果它是异步调用,那么控制器有责任在$ http promise解决时知道该怎么做。

希望它有帮助,如果你想更多的解释随意问。

0

感谢Maxim,Okazari和user3227295。

我厂是这样的:

angular.module('feedbackApp').factory('Data', function ($http, $q, Auth) { 
    $http.get('/api/things/') 
    .success(function (data){ 
       cpy = data; 
      }) 
      .error(function (err){ 

      }); 
       return {first : true}; 
      }); 

我只是想检查,如果CPY不为空,返回假,空变量返回true。

对不起,没有太多的精度问这个问题。

谢谢。

+0

你试过我的解决方案吗?你应该在你的控制器中执行.success()方法 – Okazari

+0

它不起作用,我需要一个工厂,因为我有bootstrap模式来显示一个欢迎消息,当你关闭它时,我插入到数据库中,然后每一次登录你都将看不到欢迎信息。 – solidsnake