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

时间:2013-12-02 17:05:23

标签: javascript angularjs

这是我正在与我的工厂打电话的功能

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对象更新为新值感到困惑。我如何引用myService.bf,因为this.bf会为.success函数创建一个本地实例?

2 个答案:

答案 0 :(得分:1)

试试这个:

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);
            });
       }
}

答案 1 :(得分:0)

你想在哪里初始化? 你看过$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并返回它。