ข้อความ ng ไม่แสดงข้อผิดพลาดในการตรวจสอบอย่างถูกต้อง

ฉันได้สร้างแบบฟอร์มพื้นฐานโดยใช้วัสดุเชิงมุมและต้องการให้ข้อความแสดงข้อผิดพลาดปรากฏขึ้นเมื่ออินพุตไม่ถูกต้อง ฉันพยายามสร้างโมเดลหลังจากตัวอย่างอินพุตบนเว็บไซต์อย่างเป็นทางการ ซึ่งใช้คำสั่ง ng-messages เพื่อแสดงข้อผิดพลาดในการตรวจสอบ ไม่ว่าด้วยเหตุผลใดก็ตาม ดูเหมือนว่าข้อความแสดงข้อผิดพลาดจะแสดงเฉพาะเมื่อสถานะการตรวจสอบเปลี่ยนจากถูกต้องเป็นไม่ถูกต้องเท่านั้น

ตัวอย่างเช่น มีการป้อนข้อมูลเช่น <input type="email" required> พร้อมด้วย <ng-message when="email"> ที่ระบุว่า "โปรดป้อนอีเมลที่ถูกต้อง" การเขียนอีเมลที่ไม่ถูกต้องแล้วกด Tab ไปที่ค่าถัดไปจะทริกเกอร์การตรวจสอบ รูปแบบที่ไม่ถูกต้องจะถูกนำไปใช้กับอินพุต และข้อความจะปรากฏขึ้น หากฉันดำเนินการไปยังอินพุตถัดไปทันทีโดยไม่ต้องป้อนสิ่งใดเลย องค์ประกอบจะถูกใช้สไตล์ที่ไม่ถูกต้อง (เนื่องจากแอตทริบิวต์ required) และไม่มีข้อความปรากฏขึ้นตามที่คาดไว้ (ฉันไม่ได้รวมไว้สำหรับ required) แต่หากฉันเน้นการป้อนข้อมูลอีกครั้งและเขียนอีเมลที่ไม่ถูกต้อง ข้อความจะไม่แสดงขึ้นมา (แม้ว่าฉันจะเลื่อนโฟกัสออกไปและย้อนกลับก็ตาม) องค์ประกอบอินพุตยังคงมีการใช้สไตล์ที่ไม่ถูกต้อง ข้อความจะปรากฏขึ้นอีกครั้งเมื่อฉันเขียนอีเมลที่ไม่ถูกต้องเท่านั้น (ทำให้สไตล์ที่ไม่ถูกต้องถูกลบออกจากองค์ประกอบ) จากนั้นจึงลบออกเพื่อทำให้ใช้ไม่ได้อีกครั้ง

ที่นี่ คือตัวอย่าง CodePen ที่แสดงพฤติกรรมของเขา และแสดงค่าของแอตทริบิวต์ของแบบฟอร์ม มาร์กอัปคือ:

<div ng-app="TestApp" layout="row" layout-align="center">
    <div class="md-whiteframe-6dp md-margin" layout="column" flex="33">
        <md-toolbar>
            <div class="md-toolbar-tools">
                <h3>Sign Up</h3>
            </div>
        </md-toolbar>
        <md-content class="md-padding">
            <form name="signupForm" class="md-inline-form">
                <div layout-gt-xs="row">
                    <md-input-container flex>
                        <label>Username</label>
                        <input name="username" ng-model="user.username" required ng-minlength="6" autofocus/>
                        <ng-messages for="signupForm.username.$error">
                            <ng-message when="minlength">
                                Username must be at least 6 characters
                            </ng-message>
                        </ng-messages>
                    </ng-input-container>
                </div>
                <div layout-gt-xs="row">
                    <md-input-container flex>
                        <label>Email</label>
                        <input type="email" name="email" ng-model="user.email" required/>
                        <ng-messages for="signupForm.email.$error">
                            <ng-message when="email">
                                Please give a valid email
                            </ng-message>
                        </ng-messages>
                    </ng-input-container>
                </div>
                <div layout="column" layout-gt-xs="row" layout-align="center">
                    <md-button type="submit" class="md-raised md-primary">
                        Register
                    </md-button>
                    <md-button type="button" class="md-primary">
                        Back to sign in
                    </md-button>
                </div>
            </form>
        </md-content>
    </div>
</div>

จาวาสคริปต์นั้นไม่มีอะไรนอกจาก

angular.module("TestApp", ["ngMaterial", "ngMessages"]);

คุณจะเห็นว่าอินพุตได้รับการตรวจสอบความถูกต้องอย่างถูกต้อง แต่ดูเหมือนว่าองค์ประกอบข้อความไม่ได้ใช้สไตล์ที่ถูกต้อง (opacity: 1) ในเวลาที่ควรจะเป็น


person JaredL    schedule 19.01.2016    source แหล่งที่มา


คำตอบ (1)


คุณกำลังพบกับ https://github.com/angular/material/issues/6443 .

นอกจากนั้นคุณยังขาด type="email" และข้อความสำหรับข้อผิดพลาด required

<input name="email" ng-model="user.email" type="email" required/>
<ng-messages for="signupForm.username.$error">
    <ng-message when="email">
        Please give a valid email
    </ng-message>
    <ng-message when="required">
        Email is required
    </ng-message>
</ng-messages>
person kuhnroyal    schedule 19.01.2016
comment
อ๊ะ ต้นฉบับอยู่ในหยกและเห็นได้ชัดว่าฉันลืมบางสิ่งไปเมื่อฉันเขียนตัวอย่าง ปัญหานี้ดูเหมือนสิ่งที่ฉันกำลังประสบอยู่ แต่น่าเสียดายที่ดูเหมือนจะไม่มีวิธีแก้ไข เนื่องจากฉันกำลังละทิ้งข้อผิดพลาดที่จำเป็น (ฉันคิดว่ารูปแบบข้อผิดพลาดที่ใช้กับอินพุตว่างนั้นชัดเจนเพียงพอ) ฉันคิดว่าตอนนี้ฉันสามารถใช้ ng-if เดียวสำหรับข้อความแสดงข้อผิดพลาดที่กำหนดเองได้ในตอนนี้ - person JaredL; 19.01.2016
comment
คุณสามารถลองรวม ng-show/hide กับ md-auto-hide="false" บนองค์ประกอบ ng-messages ได้ นอกจากนี้ยังมี md-is-error="CONDITION" บน md-input-container - person kuhnroyal; 19.01.2016