In version with ionic 2:
- Cordoba CLI: 6.4.0,
- Ionic Framework Version: 2.0.0-rc.0,
- Ionic CLI Version: 2.1.0,
- Ionic App Lib Version: 2.1.0-beta.1, OS:
- Node Version: v6.7.0
When using Ionic 2 FORM, the input: <ion-datetime> is slow ( see here ) .
I want to get around it and use cordova-plugin-datepicker instead . I have a lot of questions to make it work. But I'll start with the first step that I need to achieve: To implement a custom selector that can be used as a <ion-[something for a form input]> .
To get started here, we just try to implement the <ion-datetime> through another component .
I found a similar problem here . It tells import: import {IONIC_DIRECTIVES} from 'ionic-angular'; and add the metadata: directives: [IONIC_DIRECTIVES] . But in Angular 2 documentation, directives metadata no longer exists. And I get an error if I try.
Now my code is:
I have a user form page:
import { Component } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { NavController, NavParams } from 'ionic-angular'; import { NativeDatePickerTag } from '../../custom-components/native-date-picker/native-date-picker'; @Component({ selector:'user-form', templateUrl: 'user-form.html', providers: [Validators] }) export class UserFormPage { private readonly PAGE_TAG:string = "UserFormPage"; public birthdate:any; public userForm:FormGroup; constructor(public navCtrl: NavController, public navParams: NavParams, public fb:FormBuilder, public validators:Validators){} public updateUserData = () => { console.log(this.userForm.value); } ionViewDidLoad(){ console.log(this.PAGE_TAG + " ionViewDidLoad() starts"); this.userForm = this.fb.group({ birthday: [this.birthdate,Validators.required], }); } }
In my "user-form.html" it looks like this:
<ion-content> <form (ngSubmit)="updateUserData()" [formGroup] = "userForm" > <ion-item> <ion-label stacked>Birthdate</ion-label> <native-date-picker [controlName]="birthday"></native-date-picker> </ion-item> <button ion-button type="submit" block>Submit</button> </form> </ion-content>
And my custom component NativeDatePickerTag (again, this is a proof of concept, not yet implementing the cordin-plugin-datepicker):
import { Component, Input, ViewChild, ElementRef } from '@angular/core'; import { Platform } from 'ionic-angular'; import { FormGroup, FormControl } from '@angular/forms'; @Component({ selector: 'native-date-picker', template: ` <ion-datetime [formControlName]='this._controlName'></ion-datetime> ` }) export class NativeDatePickerTag { private readonly COMPONENT_TAG = "NativeDatePickerObj"; public _controlName: FormControl; @Input () set controlName(newControl: FormControl){ this._controlName = newControl; } constructor(public platform:Platform){ } }
If I run such code, it reports to console.log:
formControlName should be used with the parent formGroup directive
I do not understand why it does not take into account formGroup native-date-picker selector is embedded inside 'user-form.html'. So I tried passing formGroup from 'customer-form.html' to fix this error.
In 'user-form.html' I changed, <native-date-picker [controlName]="birthday"></native-date-picker> from: <native-date-picker [groupName]="userForm" [controlName]="birthday"></native-date-picker>
And in NativeDatePickerTag I changed the annotation with:
@Component({ selector: 'native-date-picker', template: `<div [formGroup]='this._formGroup'> <ion-datetime [formControlName]='this._controlName'></ion-datetime> </div> ` })
And I added the following to my NativeDatePickerTag class: public _formGroup: FormGroup;
@Input () set groupName(newGroup: FormGroup){ this._formGroup = newGroup; }
Now I get in console.log:
Cannot find control with undefined name attribute
I really don't understand what I'm doing wrong. Can someone, having experience in this topic, give me several directions?