角厂,对象范围混乱

时间:2015-02-18 20:49:07

标签: javascript angularjs scope

我试图修改一个函数内的变量,但必须有一些我不理解的范围,代码:

app.factory("UserService", function(){
var foo = 'bar';
return {
    init: function(){
        var self = this;
        self.create();
    },
    create: function(){
        $.post(server+"api/users", { 
                uuid: self.uuid 
            })
            .done(function(data) {
                if(data.reply !== 0){ 
                    foo = true;
                } else {
                    foo = false;
                }

            });
            return foo;                
        }
    };
});

为什么我不能在函数中更改foo的值?我已经尝试过这样做了.foo,self.foo,在把它分配给自己之后,在很多其他事情中,我相信我错过了一些太明显的东西,我觉得自己像个白痴在有人为我清理之后。

感谢。

2 个答案:

答案 0 :(得分:1)

通过查看代码,您需要先将$.post更改为$http.post,以便在执行后通过执行$ digest循环来获得更好的控制器结束, 在角度内使用jQuery会在范围digest周期中产生更多问题。

您的代码将无效,因为您从代码中创建了Ajax并从完成之外返回变量,应该使用done或成功方法从promise的完成返回。

<强>服务

app.factory("UserService", function($http) {
    var foo = 'bar';
    return {
        init: function() {
            var self = this;
            self.create();
        },
        create: function() {
            return $http.post(server + "api/users", {
                    uuid: self.uuid
                })
                .then(function(res) {
                    if (res.data.reply !== 0) {
                        return foo = true; //returning data when promise is resolved
                    } else {
                        return foo = false; //returning data when promise is resolved
                    }

                });
        }
    };
});

希望这可以帮助你,谢谢。

答案 1 :(得分:0)

试试:

app.factory("UserService", function(){
var foo = 'bar';
return {
    init: function(){
        var self = this;
        self.create();
    },
    create: function(){
        $.post(server+"api/users", { 
                uuid: self.uuid 
            })
            .done(function(data) {
                if(data.reply !== 0){ 
                    return true;
                } else {
                    return false;
                }

            });

        }
    };
});

异步函数完成后,它应该返回true或false。

干杯,

的Valentin