PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum


เตรียมใช้งาน Template driven forms ใน Angular เบื้องต้น

12 March 2017 By
templateurl moduleid template driven forms angular styleurls


สำหรับเนื้อหาในตอนนี้ เรามาดูเกี่ยวกับการจัดการฟอร์มใน Angular ด้วย 
Template driven forms โดยจะมี module ที่ชื่อ FormsModule ที่เราจำเป็นต้อง 
import เข้ามาก่อนที่จะมีการเรียกใช้ฟอร์ม เนื้อหาตอนนี้จะเป็นตอนเริ่มต้น เพราะเนื้อหา
ค่อนข้างเยอะ จะอธิบายแยกย่อยไปทีละนิด
 
ให้สมมติว่า เรากำลังจะสร้าง component ใหม่ที่ชื่อ staff-form จะเป็น component ที่เราจะ
อธิบายเกี่ยวกับฟอร์ม แต่ในตอนนี้ จะวางโครงคร่าวๆ และทำความรู้จักกับ property 
ของ @Component metadata ที่ชื่อ
  • - moduleId
  • - templateUrl
  • - styleUrls
 
สามารถทบทวนเกี่ยวกับ การสร้าง component เพิ่มเติมได้ที่ บทความ
ลองสร้าง และใช้งาน Component ใน Angular App อย่างง่าย 
http://www.ninenik.com/content.php?arti_id=767 via @ninenik


 
เริ่มต้นให้เราสร้าง Component ไฟล์ชื่อ staff-form.component.ts ไว้ในโฟลเดอร์ component 
พร้อมสร้างไฟล์ html และ css ที่ชื่อ staff-form.component.html , staff-form.component.css
ตามลำดับใน path เดียวกันกับ component ดูภาพประกอบ

ไฟล์ staff-form.component.ts


 

 
 
import { Component } from '@angular/core';

@Component({
  moduleId: module.id,
  selector: 'staff-form',
  templateUrl: `./staff-form.component.html`,
  styleUrls:  ['./staff-form.component.css']
})
export class StaffFormComponent  { 
  
}
 

ไฟล์ staff-form.component.html

<div class="container">
<h2>Angurlar Form</h2>
</div>
 

ไฟล์ staff-form.component.css

div.container{
    margin: auto;
    width: 600px;
    background: #CCC;
}

 
จะเห็นว่าจากเดิมที่เราเคยกำหนด property ที่ชื่อ template และมีการกำหนดค่าเป็นรูปแบบ
html โดยตรง ซึ่งจะสะดวกในกรณีเป็นการแสดงข้อมูลที่มีไม่มาก หรือเป็นรูปบบ html ง่ายๆ
ไม่ซับซ้อน เราก็สามารถใช้งาน template property ได้ แต่กรณี app ของเรามีความซับซ้อนเพิ่มข้ึน
อย่างในกรณีนี้ เรากำลังจะมีการใช้งานฟอร์ม ซึ่งเป็นชุด html ที่มีจำนวนมาก จึงมีการใช้งาน
templateUrl แทน  
ต่อมาก็คือ เรามีการใช้งาน styleUrls ซึ่งหมายถึง ไฟล์ css ที่เราจะใช้กับ templateUrl 
สังเกตว่าการตั้งชื่อจะเป็นรูปแบบเดียวกัน ดังที่เคยกล่าวมาแล้วในตอนต้น สามารถย้อนไปดูได้ในบทความ
 
ลองสร้าง และใช้งาน Component ใน Angular App อย่างง่าย 
http://www.ninenik.com/content.php?arti_id=767 via @ninenik
 
การกำหนดค่าของ styleUrls และ templateUrl  จะคล้ายๆ กันแต่ใน css style จะใช้ ปีกกาสี่เหลี่ยม
เปิดปิด ซึ่งเป็นลักษณะของ array นั่นหมายความว่า เราสามารถเพิ่มได้มากกว่า 1 รายการ
 

ตัวอย่างค่าของ styleUrls และ templateUrl 

`./staff-form.component.html`
['./staff-form.component.css']
 
รูปแบบ path ในลักษณะข้างต้น มีการใช้ ( ./ ) ซึ่งเป็นการกำหนด path แบบ
component-relative path หรือไฟล์ html และ css อยู่ใน path เดียวกันกับ component
ดังนั้นเพื่อเป็นการระบุเจาะจงถึงตำแหน่งของไฟล์ template และ css style ให้สัมพันธ์กับตำแหน่งของ
ไฟล์ component class เราจึงกำหนด @Component metadata โดยเพิ่ม "moduleId" property เข้าไป
เป็นดังนี้ 
 
moduleId: module.id,
 
สำหรับในไฟล์ html ของเรา ในที่นี้เราจะกำหนดโค้ดอย่างง่ายก่อน รวมถึง css ไฟล์ก็เช่นกัน
มีแค่เพียง css class ที่ชื่อ container ของ div โดยในเบื้องต้น เราต้องการแค่ดูว่า component
ของเราจะทำงานได้ถูกต้องตามหน้าที่ของมันหรือไม่ นั่นก็คือ css ไฟล์ทำงานหรือไม่ html แสดง
หรือไม่ แบบนี้เป็นต้น
 
ในส่วนของ StaffFormCompoent class เบื้องต้น ก็จะมีเพียงเท่านี้ โดยข้อมูลจาก class นี้
จะถูกนำไปแสดงใน  selector: 'staff-form', ดังนั้นต่อไปที่เราต้องปรับ คือไฟล์
app.component.ts  จะต้องมี <staff-form> 
 
 

ไฟล์ app.component.ts ดูรูปภาพประกอบ
 


 
 
import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  template: `<staff-form></staff-form>`,
})
export class AppComponent  { 

}
 
จะเห็นว่าเรากำหนด template โดยใช้ tag <staff-form> ซึ่งเป็น selector ของ StaffFormComponent
class ที่จะแสดงข้อมูล โดย AppComponent ก็จะถูกนำไปแสดงที่ tag <my-app> ที่อยู่ในไฟล์
index.html อีกที (ส่วนนี้อธิบายไว้แล้วในบทความก่อนๆ หน้า)
 
ส่วนต่อไปคือการ ส่วนของไฟล์ app.module.ts  
จุดนี้เป็นส่วนสำคัญ ทุกๆ ครั้งที่มีการเพิ่ม Component module และมีการใช้งาน
เราต้องทำการ import และเรียกใช้งานทุกครั้ง โดยต้องมาเพิ่มในไฟล์ app.module.ts ก่อนเสมอ
อย่างในกรณีนี้ เรามีการสร้าง StaffFormCompoent
จึงมีการ import เข้ามาดังรูปด้านล่าง
 

ไฟล์ app.module.ts 

 

 
 
import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule }   from '@angular/forms';

import { AppComponent }  from './app.component';
import { UserComponent }  from './components/user.component';
import { StaffFormComponent }  from './components/staff-form.component';

@NgModule({
  imports:      [ BrowserModule, FormsModule ],
  declarations: [ AppComponent, UserComponent, StaffFormComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }


 
เนื่องจากเราจะมีการใช้งานฟอร์ม และจะมีการจัดการฟอร์มโดยใช้ Template driven forms
บรรทัดที่ 3 จึงมีการ import FormsModule มาเตรียมความพร้อมไว้ก่อน 
 
import { FormsModule }   from '@angular/forms';
 
รวมทั้งทำการ import StaffFormComponent ที่เราเพิ่งสร้างมาด้วย ตามโค้ดบรรทัดที่ 7
 
import { StaffFormComponent }  from './components/staff-form.component';
สำหรับ UserComponent เป็น component ที่เราทดสอบสร้างในบทความก่อนๆ เรา import เข้ามา
แม้จะไม่ได้ใช้งานในเนื้อหาตอนนี้ (สามารถตัดออกได้ถ้าใครไม่มีไฟล์ หรือไม่ได้ทำตามเนื้อหาตั้งแต่แรก)
 
จากนั้นก็กำหนดในส่วนของ @NgModule โดยทำการ imports module 
และกำหนด declaration เป็นชื่อ component class ที่จะใช้งาน 
 
สามารถทบทวนการกำหนดค่าในไฟล์ Angular module ได้ที่บทความ
ทำความรู้จักกับ Angular modules เบื้องต้นอย่างง่าย 
http://www.ninenik.com/content.php?arti_id=765 via @ninenik
 
 

หากไม่เกิด error หรือข้อผิดพลาดขึ้น เราจะได้ผลลัพธ์การทำงานของ app ดังรูป
 

 

 
 

 
เบื้องต้นเราเตรียมความพร้อมสำหรับการใช้งานฟอร์มเท่านี้ก่อน ตอนหน้าจะลงรายละเอียด
เกี่ยวกับฟอร์ม เพิ่มเติม รวมทั้งการเชื่อมความสัมพันธ์ของข้อมูล แบบ Two-way หรือแบบไปกลับ 
ที่ใช้งานรวมกับฟอร์ม


 


   เพิ่มเติมเนื้อหา ครั้งที่ 1 วันที่ 31-03-2017


เพิ่มเติมสำหรับการเปลี่ยนแปลงของ Angular v4 คือเรื่องของการกำหนด path ของ ไฟล์ css style
และ html template  ที่กำหนด styleUrls และ templateUrl ใน Component metadata 
จากเดิมที่เราใช้งานเป็น "relative path" ให้เปลี่ยนเป็น "absolute paths" แทนทั้งหมด
 
ทบทวนเพิ่มเติมจากบทความนี้
เตรียมใช้งาน Template driven forms ใน Angular เบื้องต้น 
http://www.ninenik.com/content.php?arti_id=774 via @ninenik
 
 

ตัวอย่างไฟล์ staff-form.component.ts

 
import { Component } from '@angular/core';
 
@Component({
  moduleId: module.id,
  selector: 'staff-form',
  templateUrl: `./staff-form.component.html`,
  styleUrls:  ['./staff-form.component.css']
})
export class StaffFormComponent  { 
   
}
 
 
สมมติ ไฟล์ a.component.ts อยู่ในโฟลเดอร์ absolute paths  '/app/components/'
แล้วไฟล์ a.component.ts มีการกำหนด templateUrl และ styleUrls  จากเดิมเราใช้
(.) และ (..) กำหนด path แบบ relative ให้กับไฟล์ html และ css รูปแบบดังโค้ดด้านบน
ใน Angular v4 ให้เปลี่ยนเป็น absolute path 
 
ยกตัวอย่าง ถ้าไฟล์ a.component.html และ a.component.css อยู่ใน path เดียวกับ 
a.component.ts คือ '/app/components/' ดังนั้นส่วนของการกำหนด  templateUrl และ styleUrls 
จะเป็นดังนี้
 
@Component({
  moduleId: module.id,
  selector: 'staff-form',
  templateUrl: `/app/components/a.component.html`,
  styleUrls:  ['/app/components/a.component.css']
})
 
แบบนี้เป็นต้น
 








เนื้อหาที่เกี่ยวข้อง



Tags:: templateurl angular moduleid styleurls template driven forms






อย่าลืมกด Like กด Share เป็นกำลังใจ ในการสร้างบทความใหม่ๆ น่ะครับ


URL สำหรับอ้างอิง