【问题标题】:AngularJS Factory Object Being ReferenceAngularJS 工厂对象被引用
【发布时间】:2018-10-24 12:02:18
【问题描述】:

我按照

的教程创建了一个AngularJS工厂

https://medium.com/opinionated-angularjs/angular-model-objects-with-javascript-classes-2e6a067c73bc

问题是,没有创建新对象,并且值已更新为以前的对象,这是我的代码

let t1 = new Transaction({
  id : '123'
})
let t2 = new Transaction({         
  id : '1234'
})

console.log(t1.getId()) // Suppose to get 123 but getting 1234
console.log(t2.getId()) // Getting 1234

这是我的工厂:

.factory('Transaction',function(){
    let _data = {};

    Transaction.prototype.getId = getId


    function Transaction(params) {                 
        _data.id = params.id ? params.id : '';

    }

    function getId() {
        return _data.id;
    }

    return Transaction

});

t1.getId() 下,我想得到'123',但我得到的是'1234'。

【问题讨论】:

  • 我认为你不需要将它初始化为一个类。工厂是singleton,只要注入它,就可以访问它的方法、变量:let t = Transactions.getId()

标签: javascript angularjs oop


【解决方案1】:

_dataTransaction 的两个实例之间的共享对象,它的行为与它应有的完全一样,每次你实例化一个新的Transaction 时,id 都会覆盖前一个,你总是会得到最后一个。

要获得预期的行为,请将 _data 设为实例字段。

factory('Transaction',function(){

    Transaction.prototype.getId = getId


    function Transaction(params) {
        this.data = {};                
        this.data.id = params.id ? params.id : '';

    }

    function getId() {
        return this.data.id;
    }

    return Transaction

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    相关资源
    最近更新 更多