Angular:重置工厂或服务

时间:2016-01-06 20:58:52

标签: javascript angularjs service factory

我有一个棱角分明的工厂,它是一个复杂的物体,看起来像这样:

app.factory("mainFcty", function(){
    return {
        a:"",
        b:"",
        c:""
    }
});

当用户从应用程序继续处理时,他们会填写上面的表格。比如说他们正在预订。 他们到达流程的最后,将其添加到购物车并开始再次填写mainFcty的过程。 问题是当他们将mainFcty添加到购物车时,我需要将mainFcty重置为原始状态ab和{{ 1}}都是空字符串。 出于某种原因,一旦我再次启动该过程,应用程序将其重置为原始状态,但在此过程中,旧c的绑定重新出现并覆盖我第二次收集的所有数据。

在继续这个过程之前,任何人都有任何关于如何重置绑定并删除旧绑定痕迹的可靠想法?

非常感谢帮助!

2 个答案:

答案 0 :(得分:2)

创建默认值对象,并使用方法将值复制到可返回工厂对象,以使用默认值覆盖当前值。

例如:https://jsfiddle.net/xmtkg5tz/1/

var app = angular.module('myApp',[])
.factory("mainFcty", [function() { 
    var current_data = {}; 
    var default_values = { 
        a:"", 
        b:"I am a default that is not-empty", 
        c:"",
        resetData: function() { 
            console.log( 'Resetting')
            return current_data = angular.extend( current_data, default_values ); 
       } 
    }; 
    default_values.resetData();
    return current_data;
}])
.controller('exampleCtrl',['$scope', 'mainFcty', function($scope,mainFcty) {
    $scope.fcty = mainFcty;
    $scope.submit = function() { 
        console.log( 'reset?', $scope.fcty.a, $scope.fcty.b, $scope.fcty.c ); 
        console.log( 'Before:', mainFcty );
        mainFcty.resetData(); 
        console.log( 'After:', mainFcty ); 
    };
}]);

答案 1 :(得分:0)

我发现在出厂时声明变量更容易,调用reset,然后在我想重置变量时使用reset。

  .factory('sharedDataUserFlowService', function () {
        var serviceVariables;
        resetData();
        return {
            resetData: resetData,
            triggerFormCheck: triggerFormCheck,

        };

        function resetData() {
             serviceVariables = {
                 triggerFormValidateCheck: false,
                 triggerBlockStageVariable: null,
                 isFormValid: false,
                 blockedStage: null,
                 isProcessEnd: false
             }
        }

        function triggerFormCheck() {
            serviceVariables.triggerFormValidateCheck = !serviceVariables.triggerFormValidateCheck;
        }

可以从注入sharedDataUserFlowService.resetData();

的任何地方调用 祝你好运。