我有一个棱角分明的工厂,它是一个复杂的物体,看起来像这样:
app.factory("mainFcty", function(){
return {
a:"",
b:"",
c:""
}
});
当用户从应用程序继续处理时,他们会填写上面的表格。比如说他们正在预订。
他们到达流程的最后,将其添加到购物车并开始再次填写mainFcty
的过程。
问题是当他们将mainFcty
添加到购物车时,我需要将mainFcty
重置为原始状态a
,b
和{{ 1}}都是空字符串。
出于某种原因,一旦我再次启动该过程,应用程序将其重置为原始状态,但在此过程中,旧c
的绑定重新出现并覆盖我第二次收集的所有数据。
在继续这个过程之前,任何人都有任何关于如何重置绑定并删除旧绑定痕迹的可靠想法?
非常感谢帮助!
答案 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();