gpt4 book ai didi

angularjs - 在 AngularJS (1.x) 中清除工厂状态变化的最佳实践

转载 作者:行者123 更新时间:2023-12-04 21:30:36 26 4
gpt4 key购买 nike

我有一个非常大的应用程序,它在几十个项目中查询大量数据(作为需求)。每个项目跟踪来自其他项目的不同数据,每个项目都有自己的父状态/解析(使用 ui-router)。我可以通过各种技巧在单个页面上保持较低的数据利用率,但我很好奇的是清除不再需要的工厂单例状态转换数据的最佳实践和最高效的方法是什么?

本质上,我需要当前状态未使用的所有其他单例在状态转换时清空,以便浏览器不会因数据大小而溢出。

作为一种解决方法,我目前正在通过我所有的工厂传递数据,而不是直接将其存储在它的原始工厂中。相反,我正在解析一种外观模式,该模式从单独的数据定义工厂查询数据,并将所有解析的数据路由到单个全局存储工厂以供像这样的 View 指令使用。

angular.module('someModule', [])
.config(function($stateProvider){
$stateProvider
.state('state1', {
resolve: {state1Data: function(facadeFactory){return facadeFactory.setState1()}}
})
.state('state2', {
resolve: {state2Data: function(facadeFactory){return facadeFactory.setState2()}}
});
})
.factory('facadeFactory', function facadeFactory($q, singleStorageFactory, dataSource1, dataSource2, dataSource3, dataSource4){
var factory = {};
factory.setState1 = function(){
var dfd = $q.defer();
dataSource1.getAllData()
.then(function(result){ return dataSource2.getAllData(result);})
.then(function(result){ return singleStorageFactory.setData(result);})
.then(function(){dfd.resolve(true);});
return dfd.promise;
}

factory.setState2 = function(){
var dfd = $q.defer();
dataSource3.getAllData()
.then(function(result){ return dataSource4.getAllData(result);})
.then(function(result){ return singleStorageFactory.setData(result);})
.then(function(){dfd.resolve(true);});
return dfd.promise;
}
return factory;
})
.factory('dataSource1', function dataSource1(){
var factory = {};
factory.dataDef = {
name: "list1",
cols: ['col1','col2','col3'],
thisKey: 'col1'
};
factory.getAllData = function(currentData){
// get data > add it to currentData if it exists > return aggregated data
};
return factory;
})
// dataSource2, dataSource3, and dataSource4 are same as dataSource1 albeit with different data definition
.factory('singleStorageFactory', function singleStorageFactory($q){
var factory = {};
factory.data;
factory.setData = function(data){
var dfd = $q.defer();
factory.data = data;
dfd.resolve(factory.data);
return dfd.promise;
};
return factory;
});

我将各个数据定义存储在他们自己的工厂中,因为其他一些与将项目中的部分数据聚合到各种主跟踪器相关的要求,但这既不存在也不存在。

最重要的是,这是防止大型数据集在状态转换时使浏览器崩溃的正确方法,还是我遗漏了一些关于 AngularJS 垃圾如何从未使用的单例中收集的明显信息?

最佳答案

我们在我的办公室考虑过这个,并没有找到任何真正的保存数据绘制的方法,尤其是当数据很大时。

我们导致每 5-10 分钟刷新一次页面,但它不是 100% 的实时数据,这对我们有用。

$timeout(reload, 300000);// don't forget to inject $timeout in your controller

reload(){
$route.reload(); // don't forget to inject $route in your controller
}

关于angularjs - 在 AngularJS (1.x) 中清除工厂状态变化的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53397261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com