Он реализован и работает нормально, ниже приведены шаги:
Примечание: автономный плагин будет работать только с Formio Enterprise версии
Step1: пакет. json - Убедитесь, что formio-offline- плагин и зависимости
"formio-plugin-offline": "formio/formio-plugin-offline",
"formiojs": "^4.9.0-beta.4",
"angular-formio": "^4.5.3",
"@angular/-packages-": "8.2.14" or higher versions
Step2:
Создать автономный сервис (offline.service.ts) и импортировать его в приложение-модуль
Шаг 3: добавить приведенный ниже код в файл сервиса
import { Injectable, EventEmitter } from '@angular/core';
import { Formio } from 'angular-formio';
import { AppConfig } from '../../../config/app.config';
const FormioOfflineProject = require('formio-plugin-offline/index').default;
@Injectable({
providedIn: 'root'
})
export class OfflineService {
public onlineChange: EventEmitter<any> = new EventEmitter();
public offlinePlugin;
public offlineCount = 0;
public offlineOps: any = {};
public offlineSubmissions = [];
constructor() {
this.onOfflineServiceInit();
}
/**
* This Function is used to load all the on inti functions
* @memberOf Formio Offline Line service (OfflineService)
*/
public onOfflineServiceInit() {
this.registerOfflinePlugin();
this.registerEventsForOffline();
this.checkOfflineStatus();
this.updateOfflineCount();
}
/**
* This Function is used to Register Formio Offline Plugin
* @memberOf Formio Offline Line service (OfflineService)
*/
public registerOfflinePlugin() {
this.offlinePlugin = new FormioOfflineProject(AppConfig.appUrl);
Formio.registerPlugin(this.offlinePlugin, `offline-plugin`);
}
/**
* This Function is used to Register Formio event lisentenr
* @memberOf Formio Offline Line service (OfflineService)
*/
public registerEventsForOffline() {
Formio.events.on('offline.saveQueue', () => this.updateOfflineCount());
Formio.events.on('offline.queue', () => this.updateOfflineCount());
}
/**
* This Function is used to check Formio Offline Plugin
* @memberOf Formio Offline Line service (OfflineService)
*/
public checkOfflineStatus() {
this.offlinePlugin.ready.then(() => {
console.log('Plugin is ready');
});
}
/**
* This Function is used to check Formio Offline Plugin
* @memberOf Formio Offline Line service (OfflineService)
*/
public updateOfflineCount() {
this.offlinePlugin.ready.then(() => {
// If we are offline, then check the submission queue length.
this.offlineCount = this.offlinePlugin.submissionQueueLength();
this.offlineOps = {};
if (this.offlineCount > 0) {
this.offlineSubmissions = this.offlinePlugin.submissionQueue.map((queued) => {
this.offlineOps[queued.request._id] = queued.request.method;
return queued.request;
});
} else {
this.offlineSubmissions = [];
}
});
console.log("COUNT-------------"+this.offlineCount);
console.log(this.offlineSubmissions);
}
}
Шаг 4:
- Чтобы смоделировать автономное подключение: Откройте консоль разработчика chrome (вкладка сеть) и измените подключение на автономное. (при условии, что inte rnet связь потеряна). См. изображение ниже.
- Теперь отправьте форму, созданную в formio и отображаемую в приложении angular. Ожидаемое поведение: Форма будет успешно отправлена, а данные будут храниться локально с помощью плагина formio offline.
- Когда приложение подключено к сети, сохраненные данные будут отправлены в form.io с зарегистрированным formio api