LWC GroupButton 구성 요소 직접 제작
12198 단어 SalesforcelwcGroupButton
1. 목적
LWC에서 루프 돌리는 방법은 <template for:eatch={items} for:item="item" for:index="idx">
입니다만, 단 태그 중에는 <template if:true>
로 인덱스를 판단할 수 없기 때문에, 이번 <template for:eatch={items} for:item="item" for:index="idx">
로 루프 돌리는 동안에 인덱스를 판단하는 방법을 소개하려고 생각합니다.
2. 소스 구성도
lwc
├─groupButton
└─groupButtonContainer
groupButton
groupButton.html<template>
<div class="slds-button-group" role="group">
<template for:each={buttonList} for:item='item' for:index='index'>
{getIndex}
<template if:true={isActive}>
<button key={item.id} class="slds-button slds-button_brand" onclick={onClickHandler}
name={item.value}>{item.value}
</button>
</template>
<template if:false={isActive}>
<button key={item.id} class="slds-button slds-button_neutral" onclick={onClickHandler}
name={item.value}>{item.value}
</button>
</template>
</template>
</div>
</template>
groupButton.jsimport { LightningElement, api } from 'lwc';
export default class GroupButton extends LightningElement {
//インデックス
@api activeIndex;
//ボタンリスト
@api buttonList;
//インデックス初期化
id = -1;
/**
* インデックス取得
*/
get getIndex() {
this.id++;
}
/**
* アクティブかを判断する
*/
get isActive(){
return Number(this.activeIndex) === this.id;
}
/**
* グループボタン押下
* @param {*} event
*/
onClickHandler(event) {
let target = event.target;
let clickedButton = this.template.querySelector('.slds-button_brand');
clickedButton.classList.remove('slds-button_brand');
clickedButton.classList.add('slds-button_neutral');
target.classList.remove('slds-button_neutral');
target.classList.add('slds-button_brand');
// debugger;
this.dispatchEvent(new CustomEvent('select', {
detail: target.name
}));
}
}
groupButton.js-meta.xml<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>51.0</apiVersion>
<isExposed>false</isExposed>
</LightningComponentBundle>
groupButtonContainer
groupButtonContainer.html<template>
<div class="slds-card" style="height: 300px;width:1200px">
<c-group-button button-list={buttonList} active-index="1"></c-group-button>
</div>
</template>
groupButtonContainer.jsimport { LightningElement } from 'lwc';
export default class GroupButtonContainer extends LightningElement {
buttonList = [{
id: 0,
value: 'ボタン1'
},
{
id: 1,
value: 'ボタン2'
},
{
id: 2,
value: 'ボタン3'
},
{
id: 3,
value: 'ボタン4'
},
{
id: 4,
value: 'ボタン5'
}]
}
groupButtonContainer.js-meta.xml<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>52.0</apiVersion>
<isExposed>false</isExposed>
</LightningComponentBundle>
3. 로칼로 동작 확인
groupButtonContainern을 마우스 오른쪽 버튼으로 클릭하고 SFDX:Preview Component Locally
Use Desktop Browser
선택하기
서버를 시작하고 브라우저를 자동으로 엽니다.
Reference
이 문제에 관하여(LWC GroupButton 구성 요소 직접 제작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/MADAOU/items/187f66499f741652f84d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
lwc
├─groupButton
└─groupButtonContainer
groupButton
groupButton.html
<template>
<div class="slds-button-group" role="group">
<template for:each={buttonList} for:item='item' for:index='index'>
{getIndex}
<template if:true={isActive}>
<button key={item.id} class="slds-button slds-button_brand" onclick={onClickHandler}
name={item.value}>{item.value}
</button>
</template>
<template if:false={isActive}>
<button key={item.id} class="slds-button slds-button_neutral" onclick={onClickHandler}
name={item.value}>{item.value}
</button>
</template>
</template>
</div>
</template>
groupButton.js
import { LightningElement, api } from 'lwc';
export default class GroupButton extends LightningElement {
//インデックス
@api activeIndex;
//ボタンリスト
@api buttonList;
//インデックス初期化
id = -1;
/**
* インデックス取得
*/
get getIndex() {
this.id++;
}
/**
* アクティブかを判断する
*/
get isActive(){
return Number(this.activeIndex) === this.id;
}
/**
* グループボタン押下
* @param {*} event
*/
onClickHandler(event) {
let target = event.target;
let clickedButton = this.template.querySelector('.slds-button_brand');
clickedButton.classList.remove('slds-button_brand');
clickedButton.classList.add('slds-button_neutral');
target.classList.remove('slds-button_neutral');
target.classList.add('slds-button_brand');
// debugger;
this.dispatchEvent(new CustomEvent('select', {
detail: target.name
}));
}
}
groupButton.js-meta.xml
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>51.0</apiVersion>
<isExposed>false</isExposed>
</LightningComponentBundle>
groupButtonContainer
groupButtonContainer.html
<template>
<div class="slds-card" style="height: 300px;width:1200px">
<c-group-button button-list={buttonList} active-index="1"></c-group-button>
</div>
</template>
groupButtonContainer.js
import { LightningElement } from 'lwc';
export default class GroupButtonContainer extends LightningElement {
buttonList = [{
id: 0,
value: 'ボタン1'
},
{
id: 1,
value: 'ボタン2'
},
{
id: 2,
value: 'ボタン3'
},
{
id: 3,
value: 'ボタン4'
},
{
id: 4,
value: 'ボタン5'
}]
}
groupButtonContainer.js-meta.xml
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>52.0</apiVersion>
<isExposed>false</isExposed>
</LightningComponentBundle>
3. 로칼로 동작 확인
groupButtonContainern을 마우스 오른쪽 버튼으로 클릭하고 SFDX:Preview Component Locally
Use Desktop Browser
선택하기
서버를 시작하고 브라우저를 자동으로 엽니다.
Reference
이 문제에 관하여(LWC GroupButton 구성 요소 직접 제작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/MADAOU/items/187f66499f741652f84d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(LWC GroupButton 구성 요소 직접 제작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/MADAOU/items/187f66499f741652f84d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)