复选框 Vue 组件

复选框 Vue 组件表示复选框组件。

复选框组件

共包含以下组件

复选框属性

Prop类型默认值描述
<f7-checkbox> 属性
checked布尔值定义复选框输入是否被选中
indeterminate布尔值布尔值
定义复选框输入是否处于不确定状态name
字符串
数字
复选框输入名称name
字符串
布尔值
value
复选框输入值布尔值定义是否禁用复选框输入
readonly布尔值定义是否只读复选框输入

复选框事件

事件描述
<f7-checkbox> 事件
change当复选框状态改变时触发事件

复选框列表

复选框列表不是一个独立组件,而只是使用 <f7-list><f7-list-item> 的一个特殊情况。

<f7-list>
  <!-- Additional "checkbox" prop to enable checkbox list item -->
  <f7-list-item checkbox value="check_1" checked title="Checkbox 1"></f7-list-item>
  <f7-list-item checkbox value="check_2" title="Checkbox 2"></f7-list-item>
</f7-list>

复选框 v-model

复选框 Vue 组件支持 checked 属性上的 v-model

<template>
  <f7-page>
    <p>
      <f7-checkbox v-model:checked="jobIsDone" />
    </p>
    <f7-list>
      <f7-list-item checkbox v-model:checked="jobIsDone" title="Checkbox 1"></f7-list-item>
    </f7-list>
    <p>Job is done: {{ jobIsDone }}</p>
  </f7-page>
</template>
<script>
  export default {
    data() {
      return {
        jobIsDone: false,
      };
    }
  };
</script>

示例

checkbox.vue
<template>
  <f7-page>
    <f7-navbar title="Checkbox"></f7-navbar>
    <f7-block-title>Inline</f7-block-title>
    <f7-block strong-ios outline-ios>
      <p>
        Lorem <f7-checkbox name="checkbox-1"></f7-checkbox> ipsum dolor sit amet, consectetur
        adipisicing elit. Alias beatae illo nihil aut eius commodi sint eveniet aliquid eligendi
        <f7-checkbox name="checkbox-2" checked></f7-checkbox> ad delectus impedit tempore nemo, enim
        vel praesentium consequatur nulla mollitia!
      </p>
    </f7-block>

    <f7-block-title>Checkbox Group</f7-block-title>
    <f7-list strong-ios outline-ios dividers-ios>
      <f7-list-item checkbox title="Books" name="demo-checkbox" checked></f7-list-item>
      <f7-list-item checkbox title="Movies" name="demo-checkbox"></f7-list-item>
      <f7-list-item checkbox title="Food" name="demo-checkbox"></f7-list-item>
      <f7-list-item checkbox title="Drinks" name="demo-checkbox"></f7-list-item>
    </f7-list>

    <f7-list strong-ios outline-ios dividers-ios>
      <f7-list-item
        checkbox
        checkbox-icon="end"
        title="Books"
        name="demo-checkbox"
        checked
      ></f7-list-item>
      <f7-list-item checkbox checkbox-icon="end" title="Movies" name="demo-checkbox"></f7-list-item>
      <f7-list-item checkbox checkbox-icon="end" title="Food" name="demo-checkbox"></f7-list-item>
      <f7-list-item checkbox checkbox-icon="end" title="Drinks" name="demo-checkbox"></f7-list-item>
    </f7-list>

    <f7-block-title>Indeterminate State</f7-block-title>
    <f7-list strong-ios outline-ios dividers-ios>
      <f7-list-item
        checkbox
        title="Movies"
        name="demo-checkbox"
        :checked="movies.length === 2"
        :indeterminate="movies.length === 1"
        @change="onMoviesChange"
      >
        <template #root>
          <ul>
            <f7-list-item
              checkbox
              title="Movie 1"
              name="demo-checkbox"
              value="Movie 1"
              :checked="movies.indexOf('Movie 1') >= 0"
              @change="onMovieChange"
            />
            <f7-list-item
              checkbox
              title="Movie 2"
              name="demo-checkbox"
              value="Movie 2"
              :checked="movies.indexOf('Movie 2') >= 0"
              @change="onMovieChange"
            />
          </ul>
        </template>
      </f7-list-item>
    </f7-list>

    <f7-block-title>With Media Lists</f7-block-title>
    <f7-list media-list strong-ios outline-ios dividers-ios>
      <f7-list-item
        checkbox
        checked
        name="demo-media-checkbox"
        title="Facebook"
        after="17:14"
        subtitle="New messages from John Doe"
        text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sagittis tellus ut turpis condimentum, ut dignissim lacus tincidunt. Cras dolor metus, ultrices condimentum sodales sit amet, pharetra sodales eros. Phasellus vel felis tellus. Mauris rutrum ligula nec dapibus feugiat. In vel dui laoreet, commodo augue id, pulvinar lacus."
      ></f7-list-item>
      <f7-list-item
        checkbox
        name="demo-media-checkbox"
        title="John Doe (via Twitter)"
        after="17:11"
        subtitle="John Doe (@_johndoe) mentioned you on Twitter!"
        text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sagittis tellus ut turpis condimentum, ut dignissim lacus tincidunt. Cras dolor metus, ultrices condimentum sodales sit amet, pharetra sodales eros. Phasellus vel felis tellus. Mauris rutrum ligula nec dapibus feugiat. In vel dui laoreet, commodo augue id, pulvinar lacus."
      ></f7-list-item>
      <f7-list-item
        checkbox
        name="demo-media-checkbox"
        title="Facebook"
        after="16:48"
        subtitle="New messages from John Doe"
        text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sagittis tellus ut turpis condimentum, ut dignissim lacus tincidunt. Cras dolor metus, ultrices condimentum sodales sit amet, pharetra sodales eros. Phasellus vel felis tellus. Mauris rutrum ligula nec dapibus feugiat. In vel dui laoreet, commodo augue id, pulvinar lacus."
      ></f7-list-item>
      <f7-list-item
        checkbox
        name="demo-media-checkbox"
        title="John Doe (via Twitter)"
        after="15:32"
        subtitle="John Doe (@_johndoe) mentioned you on Twitter!"
        text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sagittis tellus ut turpis condimentum, ut dignissim lacus tincidunt. Cras dolor metus, ultrices condimentum sodales sit amet, pharetra sodales eros. Phasellus vel felis tellus. Mauris rutrum ligula nec dapibus feugiat. In vel dui laoreet, commodo augue id, pulvinar lacus."
      ></f7-list-item>
    </f7-list>
  </f7-page>
</template>
<script>
import {
  f7Navbar,
  f7Page,
  f7BlockTitle,
  f7Block,
  f7List,
  f7ListItem,
  f7Checkbox,
} from 'framework7-vue';

export default {
  components: {
    f7Navbar,
    f7Page,
    f7BlockTitle,
    f7Block,
    f7List,
    f7ListItem,
    f7Checkbox,
  },
  data() {
    return {
      movies: ['Movie 1'],
    };
  },
  methods: {
    onMovieChange(e) {
      const self = this;
      const value = e.target.value;
      const movies = self.movies;
      if (e.target.checked) {
        movies.push(value);
      } else {
        movies.splice(movies.indexOf(value), 1);
      }
    },
    onMoviesChange() {
      const self = this;
      const movies = self.movies;
      if (movies.length === 1 || movies.length === 0) {
        self.movies = ['Movie 1', 'Movie 2'];
      } else if (movies.length === 2) {
        self.movies = [];
      }
    },
  },
};
</script>