การแสดงข้อมูล โดยการแทรก Component property ใน Template เบื้องต้น

เขียนเมื่อ 7 ปีก่อน โดย Ninenik Narkdee
component property ngfor angular component ngif template

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ component property ngfor angular component ngif template

ดูแล้ว 6,612 ครั้ง


เนื้อหาตอนนี้ เรามารู้จักวิธีการนำข้อมูลมาแสดงใน template โดยข้อมูล
ที่จะใช้เป็นค่าของ component proerty หรือก็คือค่าตัวแปรที่เรากำหนดใน 
component class นั่นเอง ดูรูปด้านล่างประกอบ
 
 

 
 
จากรูป ตัวแปร name คือ component property ที่ถูกนำค่าไปแสดงใน template ด้วย
การกำหนด {{ชื่อ component property}} ซึ่งจะได้เป็น {{name}}
โดยการใช้ ดับเบิ้ลปีกกา นั้นเรียกว่า interpolation ทั้งนี้ผู้เขียนขอใช้เป็น การแสดงข้อมูล
โดยการแทรก component property
 
ขอยกโค้ดตัวอย่างไฟล์ app.component.ts มาประกอบการอธิบายเพิ่มเติม ดังนี้
 
 

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

@Component({
  selector: 'my-app',
  template: `
  <h3>{{title}}</h3>
  <hr/>
  <strong>Name:</strong> {{name}} <br/>
  <strong>Age:</strong> {{age}} <br/>
  <strong>Address:</strong> 
  {{address.addr1}} {{address.district}} {{address.amphur}} 
  {{address.province}} {{address.zipcode}} <br/>
  <strong>Sports</strong> <br/>
  <ul>
    <li *ngFor='let sport of sports'>
      {{sport}}
    </li>
  </ul>
  <strong>Status:</strong> 
  <span *ngIf='status'>Active</span>
  <span *ngIf='!status'>Not Active</span> <br/>
  `,
})
export class AppComponent  { 
  title = 'User Profile';
  name = 'Angurlar 2'; 
  age = 24;
  address = {
    addr1:'224',
    district:'คลองจั่น',
    amphur:'บางกะปิ',
    province:'กรุงเทพฯ',
    zipcode:'10240'
  }
  sports = ['Football','Tennis','Bowling'];
  status = false;
}
 
จากตัวอย่างข้างต้น ให้ดูเฉพาะส่วนของการใช้งาน component property นำไปแสดงผลโดยการใช้
{{}} น่าจะเข้าใจได้ไม่ยาก สังเกตว่า เรามีการกำหนด component property ในลักษณะตัวแปรหลายๆ
รูปแบบ  เช่น เป็น string (title, name) number (age) object (address) array (sports) และ
boolean (status)
 
 

การแสดงข้อมูลที่เป็น array ใน template ด้วย *ngFor directive 

 
ต่อไปเรามาดูในส่วนของการแสดง array สังเกตจากรูป ดูในส่วนของโค้ดเกี่ยวกับ
การวนลูปทำซ้ำ ของแท็ก <li> ใน template โดยใช้ *ngFor directive จัดการ
 
 

 
 
  <ul>
    <li *ngFor='let sport of sports'>
      {{sport}}
    </li>
  </ul>
 
*ngFor คือ Angular "repeater" directive ทำหน้าที่ในการทำการวนลูปทำซ้ำ ซึ่งในตัวอย่าง
ก็คือทำการวนลูปแสดงค่าข้อมูลใน array ใน <li> 
การใช้คำว่า let แล้วต่อด้วยตัวแปร sport เป็นการสร้างตัวแปรที่เรียกว่า template input variable
โดยไปวนลูปดึงค่าในตัว array ที่ชื่อ sports ที่เป็น component property จากนั้น
นำค่า sport ของแต่ละ array มาแสดงใน <li> โดยใช้ {{sport}}  
ถ้าเราอยากรูป index ของ array สามารถกำหนดเพิ่มเติมได้ดังนี้ 
 
  <ul>
    <li *ngFor='let sport of sports; let i=index'>
      {{i+1}}. {{sport}}
    </li>
  </ul>
 
โดยค่า i จะเริ่มต้นที่ 0 แต่เวลาแสดง เราสามารถ บวกค่าเพิ่มเพื่อแสดงลำดับให้ถูกต้องได้
 
 

การกำหนดเงื่อนไขแสดงหรือไม่แสดงข้อมูลด้วย *ngIf
 

ในการกรณีที่เราต้องการแสดง หรือไม่แสดงรายการข้อมูลบางส่วน เราสามารถใช้งาน 
*ngIf directive โดยจะอยู่ภายใต้เงื่อนไข true/false สังเกตตัวอย่างตามโค้ด้านล่าง ดังรูป
 
 

 
 
  <strong>Status:</strong> 
  <span *ngIf='status'>Active</span>
  <span *ngIf='!status'>Not Active</span> <br/>
 
สังเกตว่าหัวข้อ Status เรากำหนดให้มีการใช้งาน <span> 2 ตัว คือที่เป็นข้อความว่า
Active กับ Not Active โดยใช้ *ngIf ในการกำหนดเงื่อนไขว่าจะแสดงหรือไม่แสดง ในที่นี้
ใช้ component property ที่เป็น boolean มีค่าเป็น true หรือ false  
การใช้เครื่อง ! ด้านหน้า จะหมายถึงมีค่าตรงกันข้ามกับที่ของตัวเป็นเอง ดังนั้นถ้า
status  เท่ากับ true แล้ว !status จะเท่ากับ false แบบนี้เป็นต้น
จะได้ว่า  
*ngIf='status' ถ้า status เท่ากับ true คำว่า active จะแสดง และในขณะเดียวกับ
*ngIf='!status' ก็จะทำให้ Not Active ไม่แสดง เพราะ !status = fasle นั้นเอง
 
 

การกำหนดค่าของ Component property ใน Constructor

จากตัวอย่างโค้ดข้างต้น เราได้ทำการกำหนดค่าของตัวแปร เริ่มต้นให้กับ component แล้ว
เรายังสามารถใช้วิธีการประกาศและกำหนดค่าโดยใช้ constructor ได้ ซึ่ง constructor ก็คือ
ฟังก์ชั่นที่ทำงานทันทีเมื่อมีการเรียกใช้ component 
เรามาดูตัวอย่างโค้ด แล้วเปรียบเทียบความแตกต่างจากโค้ด้านบนดู
 
 

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

@Component({
  selector: 'my-app',
  template: `
  <h3>{{title}}</h3>
  <hr/>
  <strong>Name:</strong> {{name}} <br/>
  <strong>Age:</strong> {{age}} <br/>
  <strong>Address:</strong> 
  {{address.addr1}} {{address.district}} {{address.amphur}} 
  {{address.province}} {{address.zipcode}} <br/>
  <strong>Sports</strong> <br/>
  <ul>
    <li *ngFor='let sport of sports; let i=index'>
      {{i+1}}. {{sport}}
    </li>
  </ul>
  <strong>Status:</strong> 
  <span *ngIf='status'>Active</span>
  <span *ngIf='!status'>Not Active</span> <br/>
  `,
})
export class AppComponent  { 
  title:string;
  name:string;
  age:number;
  address:address;
  sports:string[];
  status:boolean;

  constructor(){
    this.title = 'User Profile';
    this.name = 'Angurlar 2'; 
    this.age = 24;
    this.address = {
      addr1:'224',
      district:'คลองจั่น',
      amphur:'บางกะปิ',
      province:'กรุงเทพฯ',
      zipcode:'10240'
    }    
    this.sports = ['Football','Tennis','Bowling'];
    this.status = false;
  }
}

interface address{
  addr1:string;
  district:string;
  amphur:string;
  province:string;
  zipcode:string;
}
 
ที่เพิ่มเติมเข้ามาคือมีการกำหนด ชนิดของตัวแปร ทำให้ตัวแปรนั้นๆ มีความเฉพาะเจาะจงมากขึ้น
สามารถนำค่าของตัวแปรไปใช้อย่างถูกต้องตามชนิดของตัวแปรนั้นๆ ใน construtor() มีการใช้ this
ซึ่งหมายถึง componennt class ที่กำลังใช้งานอยู่ โดยใน constructor จะทำการกำหนดค่าให้กับ
ตัวแปร property 
 
สิ่งที่เพิ่มเข้ามาให้เราสังเกตที่ตัวแปรที่ชื่อ address เนื่องจากเดิมตัวแปร address เป็น object และมี
ฟิลด์ย่อยด้านใน ดังนั้นเพื่อให้รูปแบบของฟิลด์ย่อยมีการกำหนดชนิดข้อมูลที่ถูกต้อง จึงมีการใช้งาน
interface ซึ่งเป็นรูปแบบของ TypeScript ในการเข้ามาใช้ระบุชนิดของข้อมูลในฟิลด์ด้านใน object อีกที
โดยคำสั่ง interface จะกำหนดไว้ด้านนอก component class 
 

ตัวอย่างผลลัพธ์ ของไฟล์ตัวอย่าง 
 

 

 
 
รายละเอียดเกี่ยวกับการใช้งาน template และการแสดงข้อมูลยังมีรายละเอียดอีกมาก
ยังไงรอติดตามเนื้อหาตอนต่อไป
 


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



อ่านต่อที่บทความ









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









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





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ