【问题标题】:Variable inside callback function angularjs回调函数angularjs中的变量
【发布时间】:2015-05-20 09:14:10
【问题描述】:

我尝试在工厂内使用 $scope 来存储价值,但我不能。

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

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

这是一个示例:

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

        });

console.log(cpy);

感谢您的帮助。

【问题讨论】:

  • 你必须使用 promsie。 docs.angularjs.org/api/ng/service/$q
  • @user3227295 $http 已经返回了一个承诺。
  • 在回调函数之前触发的console.log函数
  • @user3227295 你不需要显式使用承诺,因为 $http.get() 已经返回一个。这只是不好的工作流程。如果您想了解详细信息,请查看我的答案。

标签: ajax angularjs callback


【解决方案1】:

这几乎就是你所需要的。

你的工厂应该是这样的:

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

在您的控制器中,您会得到这样的结果:

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

如果你想在你的范围内进行一些绑定,它总是在控制器中完成。如果是异步调用,控制器有责任知道 $http 承诺解决后要做什么。

希望对您有所帮助,如果您需要更多解释,请随时询问。

【讨论】:

    【解决方案2】:

    感谢 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 是否不为空返回 false 并为空变量返回 true。

    很抱歉,这个问题问得不够精确。

    谢谢。

    【讨论】:

    • 你试过我的解决方案了吗?您应该在控制器中的 .success() 方法中执行此操作
    • 它不起作用,我需要一个工厂,因为我有引导模式来显示一次欢迎消息,当你关闭它时,我插入数据库,然后每次登录你都不会看到欢迎留言。
    猜你喜欢
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    相关资源
    最近更新 更多