Как перенести данные из одного файла в другой? - PullRequest
1 голос
/ 29 мая 2019

У меня есть два файла, например,

работник-ставка-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' для 'Storage': настройка значение «сотрудников» превысило квоту.

Так что я хотел бы получить хорошее решение для передачи любых больших данных из одного файла в другой без использования localalstorage ..

Поскольку приложение выполнено в комбинации Angularjs и Typescript , я не смог найти правильное решение, так как я новичок в этом сценарии.

Edit:

Вместо первого файла 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 голосов
/ 29 мая 2019

Размер локального хранилища Chrome по умолчанию составляет 10 Мб (https://en.wikipedia.org/wiki/Web_storage),), поэтому очистка локального хранилища Chrome может помочь вам. Если ваши данные превышают лимиты, вам может потребоваться найти альтернативы, такие как хранение в хранилище больших двоичных объектов и доступ к ним.содержимое самого блоба.

Для справки вы можете обработать ошибку, если хотите использовать код ниже.

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");
 }
0 голосов
/ 29 мая 2019

использование IndexedDB , это крупномасштабная система хранения NoSQL. Он позволяет хранить практически все в браузере пользователя и имеет огромный лимит в зависимости от размера клиентского компьютера, составляющего около 20% от общего объема памяти.

Пакет NPM Угловой индексированныйDB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...