在Angular2中的多步骤形式之间交换数据2:被证实的方法是什么?

前端之家收集整理的这篇文章主要介绍了在Angular2中的多步骤形式之间交换数据2:被证实的方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我可以想象以下方法在多步骤形式之间交换数据:

1)为每个表单步骤创建一个组件,并通过@input,@output在组件之间交换数据(例如,您不能从step5更改为2)

2)在新路由器(see here)中使用新的属性数据(例如,您不能从步骤5更改为2))

3)共享服务(Dependency Injection)存储数据(Component Interaction)(例如,您可以从步骤5更改为2)

4)@ ngrx / store的新基础(没有真正体验过)

你能给一些“获得经验值”,你用什么和为什么?

为什么不使用会话存储?例如,您可以使用此静态助手类(TypeScript):
export class Session {

  static set(key:string,value:any) {
      window.sessionStorage.setItem(key,JSON.stringify(value));
  }

  static get(key:string) {
      if(Session.has(key)) return JSON.parse(window.sessionStorage[key])
      return null;
  }

  static has(key:string) {
      if(window.sessionStorage[key]) return true;
      return false;
  }

  static remove(key:string) {
      Session.set(key,JSON.stringify(null)); // this line is only for IE11 (problems with sessionStorage.removeItem)
      window.sessionStorage.removeItem(key);
  }

}

并使用上面的类,你可以把你的对象与多个步骤的形式数据和共享它(想法是类似于许多后端框架,如PHP laravel的’会话助手’).

另一种方法是创建Singleton service.它可以看起来像(为了清楚起见非常简单)(我没有测试下面的代码,我从头开始):

import { Injectable } from '@angular/core';

@Injectable()
export class SessionService {

    _session = {};

    set(key:string,value:any) {
         this._session[key]= value; // You can also json-ize 'value' here
    }

    get(key:string) {
         return this._session[key]; // optionally de-json-ize here
     }

     has(key:string) {
         if(this.get(key)) return true;
         return false;
     }

     remove(key:string) {         
         this._session[key]=null;
     }
}

然后在您的主文件中引导应用程序:

...
return bootstrap(App,[
  ...
  SessionService
])
...

最后一步 – 关键:当你想在你的组件中使用你的单例服务时 – 不要在提供者部分中放置int(这是由于angular2 DI行为 – 上面有关单例服务的链接).下面的示例从步骤2到步骤3:

import {Component} from '@angular/core';
import {SessionService} from './sessionService.service';
...

@Component({
  selector: 'my-form-step-2',// NO 'providers: [ SessionService ]' due to Angular DI behavior for singletons
  template: require('./my-form-step-2.html'),})

export class MyFormStep2  {

  _formData = null;

  constructor(private _SessionService: SessionService) {
     this._formData = this._SessionService.get('my-form-data')
  }

  ...
  submit() {
     this._SessionService.set('my-form-data',this._formData)
  }

}

它应该是这样的.

原文链接:https://www.f2er.com/angularjs/140454.html

猜你在找的Angularjs相关文章