如何将数据从一个文件传输到另一个文件?

时间:2019-05-29 05:08:55

标签: javascript angularjs typescript

我有两个文件,例如

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,但是当所有内容返回为空时,这对我来说也是失败的。.

请帮助我以适当的方式修复它,卡住很长时间。

2 个答案:

答案 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");
 }