2016-07-18 13 views
1

送信ボタンについて質問があります。今私はフォームでパセリの検証を使用することができ、それは完全に動作します。しかし、ユーザーが角度でバインドする送信ボタンをクリックし、フォームに無効な入力があった場合、私のアプリはクリック機能の実行を停止できません。すべてのバリデーションは役に立たなくなります。parsley.jsで角2を指定すると送信ボタンがブロックされません

parsely.jsが非常に多くの入力状況を処理できるので、角度組み込み検証を使用したくありません。

適用-page.ts

import {RouteParams,Router,ROUTER_DIRECTIVES} from '@angular/router-deprecated'; 

import {Component, ViewEncapsulation} from '@angular/core'; 
import {Widget} from '../../core/widget/widget'; 
import {DropzoneDemo} from '../../components/dropzone/dropzone'; 
import {HolderJs} from '../../components/holderjs/holderjs'; 
import {NKDatetime} from 'ng2-datetime/ng2-datetime'; 
import {Autosize} from 'angular2-autosize/angular2-autosize'; 
import {AlertComponent} from 'ng2-bootstrap/components/alert'; 

// import models 
import {PersonalInfo} from './model/personal-info'; 
import {Job} from '../model/job'; 
import {JobService} from '../job-service'; 
import {NgForm} from '@angular/common'; 

declare var jQuery: any; 

@Component({ 
    directives: [ 
    ROUTER_DIRECTIVES, Widget, DropzoneDemo, HolderJs, NKDatetime, Autosize, AlertComponent, 
    EducationForm, ExperienceForm 
    ], 
    selector: '[apply-page]', 
    host: { 
    class: 'apply-page app' 
    }, 
    template: require('./apply-page.html'), 
    encapsulation: ViewEncapsulation.None, 
    styles: [require('./apply-page.scss'), require('../login-page.scss'), require('./forms-validation.scss')] 
}) 
export class ApplyPage { 

    colorOptions: Object = {color: '#f0b518'}; 
    sliderValueOptions: Array<number> = [200, 1547]; 

    personalInfo: PersonalInfo; 
    extraAddr: string; 
    job: Job; 

    constructor(
    // the service to get data from mock-data 
    private jobService: JobService, 
    private routeParams: RouteParams, 
    private router:Router 
){} 

    // called only one time at the loading time 
    ngOnInit(): void { 
    jQuery('#colorpicker').colorpicker(this.colorOptions); 
    jQuery('.select2').select2(); 
    jQuery('.js-slider').slider(); 
    jQuery('#markdown').markdown(); 
    jQuery('.selectpicker').selectpicker(); 

    // initialize parsleyjs to validate the input 
    jQuery('.parsleyjs').parsley(); 

    this.personalInfo = new PersonalInfo(); 
    this.educations = new Array<Education>(); 
    this.experiences = new Array<Experience>(); 
    this.skills = SKILLS; 

    // fetch the id from url 
    let id = this.routeParams.get('id'); 
    this.getJob(id); 
    } 

    // TODO: submit form to server 
    onSubmit(){ 
    console.log("on submit"); 
    } 

適用-page.html

<form class="parsleyjs" data-parsley-priority-enabled="false" novalidate="novalidate" (ngSubmit)="onSubmit()"> 
         <div class="page-section"> 
          <div class="page-section-part"> 
           <div class="row page-header-row"> 
            <div class="col-md-6 page-sub-title"> 
             PERSONAL INFO 
            </div> 
           </div> 
           <div class="row page-header-row "> 
            <div class="col-md-6 medium-text" align="center">Do you have a LinkedIn account?</div> 
            <div class="col-md-6" align="center"> 
             <input type="image" src="assets/images/pictures/linkedin-button.png" class="img-btn" (click)="getLinkedIn()" onClick="return false" alt="..."/> 
            </div> 
           </div> 
           <div class="row page-header-row"> 
            <div class="col-md-8 col-md-offset-3 small-text">We make it easier for you to import your professional profile.</div> 
           </div> 
          </div> 
          <div class="widget-body"> 
           <div class="row"> 
            <div class="col-md-6 col-xs-12"> 
             <div class="form-group"> 
              <label class="page-label" for="first-name">First name</label> 
              <input [(ngModel)]="personalInfo.firstName" class="form-control" placeholder="First name" id="first-name" type="text" required ngControl="first-name"> 
             </div> 
            </div> 

            <div class="col-md-6 col-xs-12"> 
             <div class="form-group"> 
              <label class="page-label" for="last-name">Last name</label> 
              <input [(ngModel)]="personalInfo.lastName" class="form-control" placeholder="Last name" id="last-name" type="text" required ngControl="last-name"> 
             </div> 
            </div> 

           </div> 
           <div class="row"> 
            <div class="col-md-6 col-xs-12"> 
             <div class="form-group"> 
              <label class="page-label" for="email">Email</label> 
              <input [(ngModel)]="personalInfo.email" class="form-control" placeholder="[email protected]" id="email" type="email" 
              data-parsley-trigger="change" 
              data-parsley-validation-threshold="1" 
              required data-parsley-required-message="" 
              ngControl="email"> 
             </div> 
            </div> 
            <div class="col-md-6 col-xs-12"> 
             <div class="form-group"> 
              <label class="page-label" for="phone">Phone</label> 
              <input [(ngModel)]="personalInfo.phone" class="form-control" placeholder="i.e: Sales, Marketing" id="phone" data-parsley-type="number" required data-parsley-required-message="" ngControl="address"> 
             </div> 
            </div> 
           </div> 
           <div class="row"> 
            <div class="col-md-12 col-xs-12"> 
             <div class="form-group"> 
              <label class="page-label" for="address">Address</label> 
              <input [(ngModel)]="personalInfo.address" class="form-control" placeholder="1200 Fulton st, NY, NY 10001" id="address" type="text" required> 
             </div> 
            </div> 
           </div> 
           <div class="row"> 
            <div class="col-md-6 col-xs-12"> 
             <div class="form-group"> 
              <label class="page-label" for="">Address</label> 
              <input [(ngModel)]="extraAddr" class="form-control" placeholder="1200 Fulton st" type="text"> 
             </div> 
            </div> 
           </div> 
          </div> 
         </div> 
         <div class="form-actions page-section-submit"> 
          <button class="btn btn-danger btn-lg mb-xs" role="button"> 
           Submit your application 
          </button> 
         </div> 
       </form> 

ボタンが適用-page.htmlファイルの一番下にある:以下は私のコードです。ボタンをクリックすると、apply-page.tsのonSubmit()関数が呼び出されます。本当に解決策があるかどうかを知りたいありがとうございました。

答えて

0

パーズリーにはバグがあります。申し訳ありません。あなたのボタンにtype="submit"を指定すれば正常に動作します。

+0

でのjQueryを使用する方法についての良いビデオです。角度はまだonSubmit()関数を実行します。 – gogopower

+0

角度のある遊び場に実例を投稿できますか? –

+0

私は答えを見つけました。私はparsleyjsのインスタンスを取得し、インスタンスが有効かどうかを確認する必要があります。インスタンスが有効な場合は、submit関数を実行します。そうでない場合は、何もしないでください。後でコードを投稿します。 – gogopower

2

私はそれを行う方法を見つけました。その後、をonSubmit()関数で

// initialize parsleyjs to validate the input 
this.instance = jQuery('.parsleyjs').parsley(); 

onSubmit(){ 
    if(this.instance.isValid()){ 
     // TODO: submit form to server 

    }else { 
     console.log("do nothing"); 
    } 
} 

私は角にjQueryとパセリを使用する方法を見つけ出す必要がある2 ngOnInit()で、私はでパセリのインスタンスを取得する必要があります最初に私のアプリでそれらを実装しようとします。これが他人を助けることを願っています。ありがとうございました。ところで

は、ここで私はそれを試してみたが、それはまだ動作しない角度2. https://www.youtube.com/watch?v=vrdHEBkGAow

+0

これはうまくいくが、これをする必要はありません。 –

+0

これを行う方法についてアドバイスはありますか?私はWebアプリケーションで新しく、またこれはAngs 2でparsley.jsを使うのは初めてのことです。何かアドバイスがありがとうございました:) – gogopower

関連する問題