Angular:重置工厂或服务

问题描述 投票:1回答:2

我有一个角度的工厂,这是一个复杂的对象,看起来像这样:

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

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

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

非常感谢帮助!

javascript angularjs service factory
2个回答
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 ); 
    };
}]);

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();的任何地方调用

祝好运。

© www.soinside.com 2019 - 2024. All rights reserved.