New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@sygnas/vue-tabs

Package Overview
Dependencies
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@sygnas/vue-tabs

<style> .cl-red{ color: #cc0000; } </style>

  • 2.4.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
4
decreased by-42.86%
Maintainers
1
Weekly downloads
 
Created
Source
.cl-red{ color: #cc0000; }

syg-vue-tabs

Vue でカスタマイズ可能なタブナビゲーションを実装。

Description

Vue.js でシンプルなタブナビゲーションを使いたい人向け。

Release

  • 2022.12.12
    • VueTabs の item属性 isBlankhref を無指定でもOKにした
  • 2022.02.25
    • <VueTabs>handlChange属性を廃止
    • getActiveId()setActiveId() を廃止
    • useTabControl() を新設。変更通知、getActiveId() などは useTabControl() 経由で取得する
    • 前後のタブに移動する prevTab()nextTab() を新設
    • 変更イベント受け取りに addChangeListener()、タブクリック受け取りに addClickListener() を新設
  • 2022.02.17
    • Vue3 対応
    • ほぼ作り直し
    • タブ変更の受け取りは handl-change 属性を使用
    • タブ、コンテンツを別々のコンポーネントにした
    • 外部からタブ操作できるようにした
  • 2021.06.23
    • v-on:change を指定してアクティブなタブの ID を取得できるようにした
  • 2020.03.27
    • 完全に作り直して、Vue Router を使わない方式に変更
    • 環境構築を vue-sfc-rollup に変更

Install

npm install --save @sygnas/vue-tabs

Vue2 で使う時は古いバージョンです。 使い方も違うので README.md を参照してください。

npm install --save @sygnas/vue-tabs@^1.2.0

シンプルな使い方

<section id="app-tabs1">
  <vue-tabs
    group="tabGroup1"
    default="tab1"
    :items="[
                    {id: 'tab1', value:'タブ1'},
                    {id: 'tab2', value:'タブ2'},
                    {href:'http://google.com/', value:'Google'},
                    {href:'http://google.com/', value:'Google別窓', isBlank:true},
                    ]"
  >
  </vue-tabs>

  <vue-tabs-content group="tabGroup1" tab-id="tab1">
    タブ1の内容
  </vue-tabs-content>

  <vue-tabs-content group="tabGroup1" tab-id="tab2">
    タブ2の内容
  </vue-tabs-content>
</section>
import { createApp } from 'vue';
import { VueTabs, VueTabsContent } from '@sygnas/vue-tabs';

const app = createApp({
  components: {
    VueTabs,
    VueTabsContent,
  },
});
app.mount('#app-tabs1');

解説

<vue-tabs
  group="tabGroup1"
  default="tab1"
  :items="[
                    {id: 'tab1', value:'タブ1'},
                    {id: 'tab2', value:'タブ2'},
                    {href:'http://google.com/', value:'Google'},
                    {href:'http://google.com/', value:'Google別窓', isBlank:true},
                    ]"
></vue-tabs>

group属性でタブグループに名前を付ける。 default属性で初期表示するタブの ID を指定する。 items属性でタブボタンを指定。href を指定したものはタブ切替ではなく単純なリンクになる。

<vue-tabs-content group="tabGroup1" tab-id="tab1">
  タブ1の内容
</vue-tabs-content>

group属性に vue-tabs と同じ文字列を記入。 tab-id属性に vue-tabsitems属性に対応する文字列を記入。

<vue-tabs-content><div> に置き換えられる。 別のタグに変更するには tag 属性で指定する。

変更を検知、<transition>を使う、外部からタブを変更、タイマー切り替え

<section id="app-tabs2">
  <vue-tabs
    group="tabGroup2"
    default="tabA"
    :items="[
                    {id: 'tabA', value:'タブA'},
                    {id: 'tabB', value:'タブB'},
                    ]"
    auto="8000"
    is-stop-auto="true"
  >
  </vue-tabs>

  <transition name="e-v-transition_fade" mode="out-in">
    <div v-if="activeId === 'tabA'">タブAの内容</div>
    <div v-else-if="activeId === 'tabB'">タブBの内容</div>
  </transition>

  <button @click="prevTab">前のタブ</button>
  <button @click="nextTab">次のタブ</button>
  <button @click="changeToB">タブBに切替</button>
</section>
import { createApp } from 'vue';
import { VueTabs, useTabControl } from '@sygnas/vue-tabs';

// グループIDを指定してタブの外部コントローラーを生成
const tabControl = useTabControl('tabGroup2');

const app2 = createApp({
  components: {
    VueTabs,
  },
  computed: {
    activeId() {
      // テンプレート側でアクティブIDを受け取れるように computed に登録
      return tabControl.activeId.value;
    },
  },
  methods: {
    changeToB() {
      // タブIDを指定して変更
      tabControl.setActiveId('tabB');
    },
    prevTab() {
      // 前のタブ
      tabControl.prevTab();
    },
    nextTab() {
      // 次のタブ
      tabControl.nextTab();
    },
  },
  mounted() {
    // タブの変更通知を受け取る関数を渡す
    tabControl.addChangeListener((ev) => {
      console.log('tab changed', ev.detail);
    });
  },
});

app2.mount('#app-tabs2');

解説

  <transition name="e-v-transition_fade" mode="out-in">
    <div v-if="activeId === 'tabA'">タブAの内容</div>
    <div v-else-if="activeId === 'tabB'">タブBの内容</div>
  </transition>

<transition> を使いたいなら <VueTabsContent> は使わない。 インポートした useTabControl()activeIdv-if属性を使って切り替える。

const tabControl = useTabControl('tabGroup2');

タブを外部から操作するためのコントローラーを作成。

// タブの変更通知を受け取る関数を渡す
tabControl.addChangeListener((ev) => {
  console.log('tab changed', ev.detail);
});

タブの変更イベントを受け取るためにリスナー関数を登録する。 内部は EventTargetCustomEvent で実装している。 TypeScript で型エラーが出るなら下記のように (〜) as EventListener で囲む。

tabControl.addChangeListener(((ev: CustomEvent) => {
  console.log('tab changed', ev.detail);
}) as EventListener);

Attributes

<vue-tabs>

*は必須属性

属性初期値説明
group *タブグループ ID
default *デフォルトでアクティブ(表示)するタブ ID
items *タブメニューアイテムの配列(後述)
use-hashfalseタブのアクティブ ID を location.hash に付ける
is-list-tagfalsetrue を指定すると <ul> タグを使用する。デフォルトは <div> が使われる
autoミリ秒を指定すると自動で次のタブに切り替わる
is-stop-autoタブをクリックした時に auto の自動切り替えを止める
class-tabs'c-tabmenu'タブグループのクラス名
class-item'c-tabmenu__item'is-list-tag が true の時に使用。<li> のクラス名
class-link'c-tabmenu__link'タブのクラス名

items属性

<vue-tabs :items="[{...}]"> の内容。 *は必須属性

属性初期値説明
id *タブ ID
value *タブに掲載する内容。例:タブ1
href外部リンクの時に使う
isBlankfalse別窓を開くなら true

<vue-tabs-content>

属性初期値説明
group *タブグループ ID
tabId *タブ切替の識別 ID
tag'div'<vue-tabs-content> 展開時の HTML タグ

useTabControl()

タブのコントローラーを生成する。 タブを外部から操作したり、変更を受け取れる。 複数のタブグループを使いたい時はそれぞれに対応したtabControlを作る必要がある。

import { VueTabs, useTabControl } from '@sygnas/vue-tabs';

// コントローラー生成
const tabControl = useTabControl('タブグループID');
// 変更受け取り
tabControl.addChangeListener((ev) => {
  console.log('変更', ev.detail);
});
// 任意のタブをアクティブ
tabControl.setActiveId('タブID');
// 前後のタブをアクティブ
tabControl.changePrevTab();
tabControl.changeNextTab();

Instance params

activeId: string

現在アクティブなタブのID。

activeIndex: number

現在アクティブなタブが何番目か。

Instance methods

setActiveId(activeId: string, isTabClick = false): void
  • activeId : タブID
  • isTabClick : タブボタンから実行する時だけ true

指定IDのタブをアクティブにする

setTabIdList(idList: string[]): void
  • idList : 個々のタブボタンに設定した id のリスト

タブIDリストを登録

changeNextTab(): void

次のタブをアクティブにする

changePrevTab(): void

前のタブをアクティブにする

startAutoChange(time: number): void
  • time : 自動切り替え間隔をミリ秒で指定

指定間隔で自動的に次のタブに切り替える

stopAutoChange(): void

自動切り替えを止める

addChangeListener(func: EventListenerOrEventListenerObject): void
  • func : (ev) => void

アクティブタブが変更された時に実行される関数を登録

addClickListener(func: EventListenerOrEventListenerObject): void
  • func : (ev) => void

クリック時に実行される関数を登録。 addChangeListener() も同時に呼ばれるので注意。

License

MIT

Keywords

FAQs

Package last updated on 17 Mar 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc