簡體   English   中英

角度工廠,對象范圍混亂

[英]Angular factory, object scope confusion

我正在嘗試修改函數中的變量,但是代碼中一定存在我不了解的范圍:

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的值? 在將它分配給self之后,我嘗試過執行this.foo,self.foo等很多事情,我相信我錯過的東西太明顯了,在有人為它清理之后我會覺得自己是個白痴。我。

謝謝。

通過查看您的代碼,您需要首先將$.post更改$.post $http.post ,以便在執行之后執行$ digest循環,從而獲得對綁定更好的控制器,在angular中使用jQuery會導致范圍digest循環產生更多問題。

您的代碼將無法工作,因為您是從代碼中創建了一個Ajax並從done之外返回了變量,應該使用done或success方法從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
                    }

                });
        }
    };
});

希望這可以對您有所幫助,謝謝。

試試看:

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。

干杯,

瓦倫丁

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM