如何为工厂对象设置复位功能?

时间:2014-10-10 05:47:34

标签: javascript angularjs

所以这是一个简单的对象..

angular.module('POSapp')
.factory('RequestedPayment', function() {

return {
    btcValue: 0,
    timeGenerated: 0,
    paid: false,
    destAddress: '',
    idrAmount: '',
    usdAmount: ''
};
});

我将上面的工厂对象注入各种控制器。 e.g。

angular.module('POSapp')
.controller('InvoiceController', function($scope, $location, $timeout, RequestedPayment, CurrencyConvert) {

$scope.reqPayment = RequestedPayment;

对于某些情况,我需要将工厂对象重置为初始默认值。最干净的方法是什么?

也许重构工厂所以我可以做类似

的事情
$scope.reqPayment = RequestedPayment.reset();

任何最佳做法? 感谢。

1 个答案:

答案 0 :(得分:3)

由于您使用的是单个数据实例本身,为什么不使用实际返回单例的.service()。创建一个将被实例化为角度服务的函数,该函数具有重置对象当前值的reset()方法。

<强> DEMO

(function() {

    // original data
    var originalData = {
        btcValue: 0,
        timeGenerated: 0,
        paid: false,
        destAddress: '',
        idrAmount: '',
        usdAmount: ''
    };

    function RequestedPayment() {
        // calls the reset function defined below
        this.reset();
    }

    RequestedPayment.prototype.reset = function() {
        // angular extend deep copies enumerable properties of the `originalData` object
        // to the properties that RequestPayment has, overwriting any values that exist
        // within the `originalData` object.
        angular.extend(this, originalData);
    };

    angular.module('POSapp', [])

        .service('RequestedPayment', RequestedPayment)

        .run(function(RequestedPayment) {
            console.log(RequestedPayment.btcValue);
            RequestedPayment.btcValue = 100;
            console.log(RequestedPayment.btcValue);
            RequestedPayment.reset();
            console.log(RequestedPayment.btcValue);
        });

})();