从函数内部修改角度工厂对象



这是我正在使用的调用工厂的函数

var myService = function($http) {
    return {
        bf: null,
        initialize: function() {
            this.promise = $http.get(this.server + "/requestkey").success(function(data) {
                myService.bf = new Blowfish(data.key);
            });
       }
}

我正在使用创建这个对象

TicTacTorrent.service('AService', ['$http', myService]);

然而,当调用AService.initialize()时,它会像应该的那样创建promise对象,但不会更新BF对象。我很困惑如何将bf对象更新为新值。既然这个.bf会为.success函数创建一个本地实例,我该如何引用myService.bf?

试试这个:

var myService = function($http) {
    this.bf = null;
    return {
        bf: this.bf,
        initialize: function() {
            this.promise = $http.get(this.server + "/requestkey").success(function(data) {
                myService.bf = new Blowfish(data.key);
            });
       }
}

您想在哪里初始化?您看到$provider示例代码了吗?搜索"提供者(名称,提供者)"并检查它是否适合您的需求。

否则,我不确定你写的代码会是什么样子。

我通常这样写工厂:

angular.module('app').factory('myService', ['$http', function($http) {
    var publicObj = {};
    publicObj.bf = ""; // Just to make sure its initialized correctly.
    publicObj.initialize = function() {snip/snap... myService.bf = new Blowfish(data.key);};
    return publicObj;
}]);

不同之处可能是您以前的代码返回了一个内联匿名对象,该对象可能很难引用自身。但按照这种逻辑,它应该只让myService返回一个预先声明的var并返回它。

最新更新