我有两个文件,例如
employee-rates-controller.ts:
private load() {
return this.entityService
.load(this.$scope.projectRevisionUid)
.then(resp => {
localStorage.removeItem('employeerates');
this.$scope.employeeRates = resp.employeeRates;
return this.refreshCostRate(...resp.employeeRates)
.then(() =>
localStorage.setItem(
'employeerates',
JSON.stringify(this.$scope.employeeRates)
)
)
.then(() => this.refreshBillRate(...resp.employeeRates))
.then(() => resp.employeeRates.forEach(erm => this.calculate(erm)))
.then(() => DatepickerUtil.reinitializeDatepickers(this.$scope));
})
}
在另一个文件中,
getEmployeeRates.ts:
const employeerates = JSON.parse(
localStorage.getItem('employeerates')
);
if (employeerates && employeerates.length != null) {
employeerates.forEach((element: any) => {
if (
this.employee.getUid() === element.user.personUid &&
element.internalRate
) {
this.cost_rate_uom = element.internalRate * this.uom_factor;
this.cost_rate_per_hour =
this.cost_rate_uom / this.uom_factor;
this.cost_rate.setValue(this.ap4_cost_rate_per_hour);
}
});
}
在这里您可以看到
在第一个ts文件中,
localStorage.setItem('employeerates',JSON.stringify(this.$scope.employeeRates))
然后在第二个ts文件中接收数据,
const employeerates = JSON.parse(localStorage.getItem('employeerates'));
如果我添加很少的员工,我找不到任何问题,但是当我继续添加员工时,这意味着将他们存储到localstorage
中,当数据大小为巨大,它阻碍了整个过程。
错误是
QuotaExceededError:无法在“存储”上执行“ setItem”:设置 “员工”的价值超过了配额。
因此,我希望在不使用localstorage的情况下将任何大数据从一个文件传输到另一个文件中,获得一些好的解决方案。
由于应用程序是由 Angularjs和Typescript 组合而成的,所以我找不到合适的解决方案,因为我是这种情况的新手。
编辑:
我也可以从第一个TS文件中获取该文件中的值。
employeeratemodel.ts:
export class EmployeeRateModel {
public uid: string;
.
.
.
public internalRate: number; // Getting the value here
}
如何在第二个ts getEmployeeRates.ts:
文件中获取此值。
我的尝试:
import { EmployeeRateModel } from '../component/employee-rates/model/employee-rate.model';
constructor() {
const data = new EmployeeRateModel();
console.log(data) // {} // Gives empty object.. I need to fetch the internalRate from it..
}
如果我得到了数据,那么我将很容易获得计算所需要的internalRate
,但是当所有内容返回为空时,这对我来说也是失败的。.
请帮助我以适当的方式修复它,卡住很长时间。
答案 0 :(得分:0)
使用IndexedDB,它是一个大型的NoSQL存储系统。它使您几乎可以在用户的浏览器中存储任何内容,并且基于客户端计算机的huge limit大约占总存储量的20%。
NPM软件包Angular IndexedDB
答案 1 :(得分:0)
Chrome的本地存储默认大小为10 Mb(https://en.wikipedia.org/wiki/Web_storage),因此清除Chrome的本地存储可以为您提供帮助,如果您的数据大于限制,则可能需要找到其他替代方法,例如在blob存储上存储和从blob本身访问内容。
作为参考,如果您想使用下面的代码,则可以处理该错误。
try {
var counter = 1;
var stringData = "AddLocalStorageTillItIsFull";
for (var i = 0; i <= counter; counter + 1) {
stringData += stringData;
localStorage.setItem("localStorageData", stringData);
console.log(stringData);
console.log(counter);
}
}
catch (e) {
// When local storage is full, it goes hits this carch block
console.log("Local Storage is full, Please clear local storage data to add more");
}