Comment utiliser Angulaire 2 du FormBuilder entre plusieurs composants

Je suis en train d'utiliser FormBuilder dans une page j'ai Ionique dans les 2.

Tout d'abord, voici mon environnement de détails:
En cours d'exécution sur Windows 10, et en cours d'exécution ioniques --version me donne 2.0.0-bêta.35

Ici une partie de mes paquet.json fichier:

...
"@angular/common": "2.0.0-rc.3",
"@angular/compiler": "2.0.0-rc.3",
"@angular/core": "2.0.0-rc.3",
"@angular/forms": "^0.3.0",
"@angular/http": "2.0.0-rc.3",
"@angular/platform-browser": "2.0.0-rc.3",
"@angular/platform-browser-dynamic": "2.0.0-rc.3",
"ionic-angular": "2.0.0-beta.10",
"ionic-native": "1.3.2",
"ionicons": "3.0.0"
...

Deuxième, voici les deux fichiers principaux concernés:

insight.ts

import { Component } from '@angular/core';
import {NavController, NavParams} from 'ionic-angular';
import {
  REACTIVE_FORM_DIRECTIVES,
  FormBuilder,
  FormControl,
  FormGroup
} from '@angular/forms';
import { App, Insight } from '../../models';
import { InsightProvider } from '../../providers/insight/insight.service';
import { InsightImage, InsightLabel, InsightLink, InsightQuestion, InsightThought, InsightTodo, InsightVideo } from './shared';

@Component({
  templateUrl: 'build/pages/insight/insight.html',
  directives: [REACTIVE_FORM_DIRECTIVES, InsightImage, InsightLabel, InsightLink, InsightQuestion, InsightThought, InsightTodo, InsightVideo],
  providers: [App, InsightProvider, FormBuilder]
})
export class InsightPage {

  canAdd: boolean;
  showDetails: boolean;
  newInsight: Insight;
  insightForm: FormGroup;

  constructor(private insightProvider: InsightProvider,
              private params: NavParams) {
    this.insightForm = new FormGroup({
      type: new FormControl('', []),
      todo: new FormControl('', []),
      checked: new FormControl(false, []),
      imageUrl: new FormControl('', []),
      link: new FormControl('', []),
      url: new FormControl('', []),
      label: new FormControl('', []),
      question: new FormControl('', []),
      answer: new FormControl('', []),
      title: new FormControl('', []),
      details: new FormControl('', []),
    });
  }

  ngOnInit() {
    this.canAdd = false;
    this.showDetails = true;
  }

  addNewInsight() {
    if (this.newInsight.type) {
      this.insightProvider.createInsight(this.newInsight)
      .subscribe(response => {
        this.newInsight.setId(response.data.id);
        this.newInsight.title = '';
        console.log(response);
      });
    }
  }

  deleteClicked(index: number) {
    console.log('Clicked on ' + index);
    this.insightProvider.deleteInsight(this.newInsight)
    .subscribe(data => {
      console.log(data);
    });
  }


}

insight.html

<form [ngFormModel]="insightForm" (ngSubmit)="createNewInsight()">
      <ion-item>
        <ion-label for="type">Insight Type</ion-label>
        <ion-select name="type" id="type" [formControl]="type">
          <ion-option value="label">Label</ion-option>
          <ion-option value="thought">Thought</ion-option>
          <ion-option value="link">Link</ion-option>
          <ion-option value="question">Question</ion-option>
          <ion-option value="todo">Todo</ion-option>
          <ion-option value="image">Image</ion-option>
          <ion-option value="video">Video</ion-option>
        </ion-select>
      </ion-item>

      <div [ngSwitch]="type">
          <insight-image [form]="insightForm" *ngSwitchCase="'image'"></insight-image>
          <insight-label [form]="insightForm" *ngSwitchCase="'label'"></insight-label>
          <insight-link [form]="insightForm" *ngSwitchCase="'link'"></insight-link>
          <insight-question [form]="insightForm" *ngSwitchCase="'question'"></insight-question>
          <insight-thought [form]="insightForm" *ngSwitchCase="'thought'"></insight-thought>
          <insight-todo [form]="insightForm" *ngSwitchCase="'todo'"></insight-todo>
          <insight-video [form]="insightForm" *ngSwitchCase="'video'"></insight-video>
      </div>

      <button type="submit" block primary text-center (click)="addNewInsight()" [disabled]="!newInsight.type">
        <ion-icon name="add"></ion-icon> Add Insight
      </button>
    </form>

Comme vous pouvez le voir, je suis en train de passer le FormGroup Objet en plusieurs composantes, de sorte que je pouvais les utiliser.

Voici un exemple de ce que l'un des composants (version minimale pour le moment):

<ion-item>
  <ion-label floating for="link">Link</ion-label>
  <ion-input type="text" name="link" id="link" [formControl]="link"></ion-input>
</ion-item>

<ion-item>
  <ion-label floating for="url">URL</ion-label>
  <ion-input type="text" id="url" name="url" [formControl]="url"></ion-input>
</ion-item>

Le problème je suis confrontée à l'heure actuelle, c'est cette erreur:

Comment utiliser Angulaire 2 du FormBuilder entre plusieurs composants

Je crois que ce qui se passe est que le FormBuilder est à la recherche pour les prénoms je déclare dans mon fichier d'enregistrement de fichier (tel que todo, imageUrl, lien, etc), mais comme il est dans mes autres composants, il erreurs, sa pensée n'y est pas.

Ce qui pourrait être la raison de cette erreur? J'ai regardé en ligne et ne pouvait pas trouver les questions connexes.

Pour info, la raison pour laquelle j'ai besoin d'eux dans les composants et pas dans la même page, c'est parce que dans l'avenir, la fonctionnalité sera différent pour chaque entrée, il devait donc donner à chaque élément d'une "Responsabilité Unique".

Merci d'avance

Vous n'avez pas mentionné la version de Ionic2 que vous utilisez, il peut être important. Je ne suis pas sûr, mais le message d'erreur indique "non spécifié nom" donc essayez d'utiliser ngControl="url" au lieu de [formControl]="url"
Je viens de mettre à jour l'objet de ma question de mon environnement de détails dans la partie supérieure. Merci de me le rappeler pour vous faire connaître mon environnement. J'ai essayé ngControl="url", mais je suis maintenant "Pas de fournisseur pour ControlContainer". J'ai ajouté "ControlContainer" en tant que fournisseur dans mon composant, mais recevoir le même message d'erreur. Juste au cas où, j'ai essayé de faire formControl="url", j'obtiens le même message d'erreur
Bien Ionic2 est encore une version bêta, s'attendre à des modifications importantes de la fonction les Formes à Venir de la Proposition de Modification. Mon prochain pense à utiliser formControlName="url"
Merci pour cela. J'ai essayé d'utiliser formControlName="url", mais maintenant, je suis pas No provider for NgControl. J'ai eu FORM_DIRECTIVES dans mon composant directives de déclaration, mais en vain. J'ai aussi essayé d'ajouter NgControl à mes fournisseurs. Même résultat.

OriginalL'auteur Daniel Hair | 2016-08-15