เนื้อหาในตอนนี้ จะเป็นการประยุกต์ใช้งาน สิ่งที่เราได้รู้
เกี่ยวกับ property formcontroller โดยจะใช้ในการสร้าง form
และตรวจสอบ form
บทความที่เกี่ยวข้องก่อนหน้า
ทบทวน property ของ formcontroller ใน angularjs ตอนที่ 6
https://www.ninenik.com/content.php?arti_id=528 via @ninenik
ภาคต่อ error property ของ formcontroller ใน angularjs ตอนที่ 7
https://www.ninenik.com/content.php?arti_id=529 via @ninenik
ก่อนเริ่ม ขอแนะนำ css ของ bootstrap ที่จะมีการใช้งาน
has-error เป็น css class ที่ใช้ร่วมกับ form-group สำหรับแสดงผล ส่วนของเนื้อหา หรือ element ที่อยู่ภายใน css นี้ ให้เป็นไปในลักษณะ การ hilight แจ้ง error
text-danger เป็น css class สำหรับใช้กับแท็ก span กำหนดการแสดงข้อความในลักษณะ การแจ้ง error
ดูโค้ดเกี่ยวกับการใช้งานกับ input type email ประกอบ
<div class="form-group" ng-class="{'has-error': myForm.email.$invalid && !myForm.email.$pristine}"> <label class="control-label" for="email">Email :</label> <input type="email" class="form-control" name="email" ng-model="email" required /> <span ng-show="myForm.email.$error.required && !myForm.email.$pristine" class="text-danger"> Required</span> <span ng-show="myForm.email.$error.email" class="text-danger"> Not a Email</span> </div>
จากโค้ดด้านบน ประกอบไปด้วย
div
label
input type email
span 2 อัน
ดูไปทีละตัว
<div class="form-group"> ... </div>
ตัวนี้จะคลุมด้านนอก ถ้ามีการเช็คก input type email แล้วเกิดข้อผิดพลาด
ก็จะถูก กำหนดให้ มี css class ชื่อ has-error เพื่มเข้ามา โดยเมื่อ css นี้เพิ่มเข้ามา
จะทำให้ส่วนต่างๆด้านใน แสดงในลักษณะแบบ error เช่น ข้อความเป็นสีแดง
input type มี hilight ขอบเป็นสีแดง แบบนี้เป็นต้น
<div class="form-group has-error"> </div>
โค้ดด้านบนที่มีการเพิ่ม css เข้ามา ได้มาจากการใช้งาน ng-class directive
<div class="form-group" ng-class="{'has-error': myForm.email.$invalid && !myForm.email.$pristine}"> ... </div>
เทียบอย่างง่าย
<div class="form-group" ng-class="{'css class ที่จะใช้': ตรวจสอบ element หรือ input type email ที่ต้องการ}"> ... </div>
ดังนั้น
{'has-error': myForm.email.$invalid && !myForm.email.$pristine} {'เพิ่ม class ชื่อ has-error': (email ไม่ถูกต้อง และ (ตรงช้าม)ยังไม่กรอกข้อมูล} {'เพิ่ม class ชื่อ has-error': (email ไม่ถูกต้อง และ กรอกข้อมูลแล้ว} {'เพิ่ม class ชื่อ has-error': (กรอกข้อมูลแล้ว และ email ไม่ถูกต้อง} ตามเงื่อนไขด้านบน ถ้าเป็นจร้ง หรือ ถ้ากรอกข้อมูลแล้ว และข้อมูลที่กรอกมีรูปแบบ email ไม่ถูกต้อง ก็จะเป็น true ดังนั้น css class has-error จะถูกเพิ่มเข้าไปใน div
ตัวต่อมา label
<label class="control-label" for="email">Email :</label>
label นี้จะมี css class ชื่อ control-label ซึ่งจะมีผลตาม has-error ของ div ด้านนอก
คือมี hilight สีแสดงของข้อความ
ต่อมา input type email
<input type="email" class="form-control" name="email" ng-model="email" required />
input type email นี้จะมี css class ชื่อ form-control และจะมีผลตาม has-error โดย
ถ้าเกิดข้อผิดพลาด ก็จะแสดง ขอบเป็นสีแดง
ต่อมา span ตัวแรก
<span ng-show="myForm.email.$error.required && !myForm.email.$pristine" class="text-danger">Required</span>
span ตัวนี้จะใช้สำหรับแจ้งว่า ถ้าเกิดข้อผิดพลาด เช่น input type email ไม่ได้กรอก
ข้อมูล ส่วนนี้ก็จะแสดง โดยใช้ css class ชื่อ text-danger เพื่อกำหนดให้เป็นข้อความสีแดง
จะเห็นว่า span ตัวนี้ กำหนดการแสดง โดยการใช้ ng-show directive
ดูอธิบาย แบบเป็นลำดับ
ng-show="myForm.email.$error.required && !myForm.email.$pristine" แสดง span นี้ = " error เป็นค่าว่าง และ (ตรงข้าม)ยังไม่กรอกข้อมูลแล้ว" แสดง span นี้ = " error เป็นค่าว่าง และ กรอกข้อมูลแล้ว" แสดง span นี้ = " กรอกข้อมูลแล้ว และ error เป็นค่าว่าง" // คือพิมพ์แล้วลบ ตามเงื่อนไข ถ้าผู้ใช้ได้เข้าไปใช้งาน เช่น ลองพิมพ์ข้อมูลไปแล้ว แต่เกิดลบ ข้อมูลออก จนกลายเป็นค่าว่าง ค่าก็จะเป็น true span แจ้งเตือนก็จะแสดง
ตัวสุดท้าย span ตัวที่สอง
<span ng-show="myForm.email.$error.email" class="text-danger"> Not a Email</span>
span ตัวนี้แสดง ข้อความเช็คเพิ่มเติม ว่ารูปแบบ email ที่กรอกถูกต้องหรือไม่ โดยใช้ css class ชื่อ text-danger เพื่อกำหนดให้เป็นข้อความสีแดง ถ้ารูปแบบ email ไม่ถูกต้อง
span ตัวนี้ กำหนดการแสดง โดยการใช้ ng-show directive
ดูอธิบาย แบบเป็นลำดับ
แสดง span นี้ = " error รูปแบบ email ไม่ถูกต้อง และ (ตรงข้าม)ยังไม่กรอกข้อมูลแล้ว" แสดง span นี้ = " error รูปแบบ email ไม่ถูกต้อง และ กรอกข้อมูลแล้ว" แสดง span นี้ = " กรอกข้อมูลแล้ว และ error รูปแบบ email ไม่ถูกต้อง" ผลตามเงื่อนไข span ตัวที่ 2 นี้จะแสดง เมื่อเงื่อนไขเป็น true นั้นคือ กรอกข้อมูลแล้ว แต่ข้อมูลที่กรอกไม่ใช้รูปแบบของ email
มาดูเพิ่มอีกอัน
<button type="submit" ng-disabled="myForm.$invalid" class="btn btn-primary">Submit</button>
ปุ่ม submit นี้มีการตรวจสอบ form และกำหนดการใช้งาน คือ ถ้า ฟอร์ม กรอกข้อมูล
ไม่ครบ ตามรายการที่กำหนด required หรือ มีรายการบางรายการ มีรูปแบบไม่ถูกต้อง
ปุ่มนี้ก็จะถูกกำหนดให้ เป็น disabled หรือ ก็คือ กดแล้วไม่มีผลหรือไม่ทำงาน
การตรวจสอบ form นี้ ใช้ ng-disabled directive
ดูอธิบาย แบบเป็นลำดับ
ng-disabled="myForm.$invalid" ให้ disabled = "ฟอร์มมีรายการที่ ยังไม่ถูกต้อง เช่น กรอกไม่ครบ หรือรูปแบบไม่ถูกต้อง" เมื่อเปิดเข้ามาครั้งแรก เราจะพบว่า ปุ่มนี้จะ disabled อยู่ เพราะ ให้ disabled = "ฟอร์มมีรายการที่ ยังไม่ถูกต้อง เช่น กรอกไม่ครบ หรือรูปแบบไม่ถูกต้อง" ให้ disabled = true
ปุ่ม submit นี้ จะพร้อดเมื่อ disabled = false ซึ่งก็คือ มีการกรอกข้อมูลครบถ้วนและถูกต้อง
ทั้งหมดนี้ ก็คือการประยุกต์ใช้งาน property formcontroller ตรวจสอบ form
โดย ใช้งานร่วมกับ css ในที่นี้ใข้ร่วมกับ css bootstrap (เคยแนะนำไว้ในตอนที่ 3)
เพิ่ม ลบ แก้ไข รายการ ด้วย angularjs ตอนที่ 3
https://www.ninenik.com/content.php?arti_id=517 via @ninenik
โค้ดสำหรับเป็นรูปแบบ ใช้ในการสร้าง form และการตรวจสอบ form ร่วมกับ
การใช้งาน css bootstrap
<!DOCTYPE html> <html ng-app="app"> <head> <meta charset="utf-8" /> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.17/angular.min.js"></script> <link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.min.css" /> <script src="app.js"></script> <title>My Learn AngularJs 6</title> <style type="text/css"> </style> </head> <body ng-controller="appController"> <br> <div class="container"> <form name="myForm" role="form"> <div class="form-group" ng-class="{'has-error': myForm.name.$invalid && !myForm.name.$pristine}"> <label class="control-label" for="name">Name :</label> <input type="text" name="name" ng-model="name" class="form-control" required /> <span ng-show="myForm.name.$error.required && !myForm.name.$pristine" class="text-danger"> Required</span> </div> <div class="radio"> <label class="radio-inline"> <input type="radio" name="gender" ng-model="gender"/>Male </label> <label class="radio-inline"> <input type="radio" name="gender" ng-model="gender" />Female </label> </div> <div class="form-group" ng-class="{'has-error': myForm.site.$invalid && !myForm.site.$pristine}"> <label class="control-label" for="site">Website :</label> <input type="url" class="form-control" name="site" ng-model="site" required /> <span ng-show="myForm.site.$error.required && !myForm.site.$pristine" class="text-danger"> Required</span> <span ng-show="myForm.site.$error.url" class="text-danger"> Not a URL</span> </div> <div class="form-group" ng-class="{'has-error': myForm.email.$invalid && !myForm.email.$pristine}"> <label class="control-label" for="email">Email :</label> <input type="email" class="form-control" name="email" ng-model="email" required /> <span ng-show="myForm.email.$error.required && !myForm.email.$pristine" class="text-danger">Required</span> <span ng-show="myForm.email.$error.email" class="text-danger"> Not a Email</span> </div> <div class="form-group"> <label for="desc">Description :</label> <textarea name="desc" class="form-control" rows="3">{{desc}}</textarea> </div> <div class="checkbox"> <label> <input type="checkbox" name="acept" ng-model="acept" required /> Acept our terms and conditions? </label> </div> <a href="#/" class="btn btn-default">Cancel</a> <button type="submit" ng-disabled="myForm.$invalid" class="btn btn-primary">Submit</button> </form> <br> </div> </body> </html>
ไฟล์ app.js
angular.module("app",[]) .controller("appController",["$scope",function($scope){ // $scope.name="test"; }]);
ตัวอย่าง
จบสำหรับตอนนี้ รอติดตามตอนต่อไป