Vue.js 极简小例:表单 (输入框 input、文本域 textarea、单选框 radio、下拉菜单 selected、复选框 checkbox)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

代码:

<template>
<div > 
      
  <p>----------------------------------------------------------------------------------------------------------------------<p/>
  <!-- input 框: trim 自动过滤用户输入的首尾空格 -->
  <input v-model.trim="inputContent" placeholder=" 请输入 ... ">
  input 框内容为: {{ inputContent }}

  <p><p/>
  <!-- 文本域 -->
  <textarea v-model="textarea" placeholder="请输入 ... "></textarea>
  文本域 内容为: {{ textarea }}

  <p>----------------------------------------------------------------------------------------------------------------------<p/>
  <!-- 复选框 -->
  <p>单个复选框 (取逻辑值):</p> 
  <input type="checkbox" v-model="checked">
  <label>{{ checked }}</label>
	
  <p>多个复选框 (绑定到同一个数组):</p>
  <input type="checkbox" value="我" v-model="checkedNames">
  <label>我</label>
  <input type="checkbox" value="喜欢" v-model="checkedNames">
  <label>喜欢</label>
  <input type="checkbox" value="小熊" v-model="checkedNames">
  <label>小熊</label>
  <br>
  <span>复选框数组的值为: {{ checkedNames }}</span>

  <p>----------------------------------------------------------------------------------------------------------------------<p/>
  <!-- 单选框 -->
  <input type="radio"  value="是" v-model="picked">
  <label>是</label>
  <br>
  <input type="radio" value="否" v-model="picked">
  <label>否</label>
  <br>
  <span>单选框选中值为: {{ picked }}</span>
  <p>----------------------------------------------------------------------------------------------------------------------<p/>

  <!-- 下拉菜单 -->
  <div id="app">
    <select v-model="selected">
        <option value="">---选水果啰---</option>
        <option value="大柚子">大柚子</option>
        <option value="小柚子">小柚子</option>
        <option value="大大小小的柚子">大大小小的柚子</option>
    </select>
    <br/> <br/> 
    <div id="output">选择的水果是: {{selected}} (啦啦啦,悄悄告诉你,反正我就是喜欢柚子 ...) </div>
  </div>
  <p>----------------------------------------------------------------------------------------------------------------------<p/>

</div>
</template>


<script type="text/javascript">

export default {    
  data () {
    return {
    selected: '' ,
    picked : '是',
    checked : false,
    checkedNames: [],
    inputContent: '',
	textarea: ''
    }
  }
}

</script>

运行效果:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我来详细回答。 首先,我们需要创建一个组件,可以命名为 MyForm 组件,该组件包含了四个表单元素:input 输入框、select 下拉框、textarea 文本域checkbox 复选框。组件的模板可以如下所示: ```html <template> <div> <label>{{label}}</label> <div> <input v-if="type === 'input'" v-model="value" /> <select v-if="type === 'select'" v-model="value"> <option v-for="option in options" :value="option.value">{{option.label}}</option> </select> <textarea v-if="type === 'textarea'" v-model="value"></textarea> <label v-if="type === 'checkbox'"> <input type="checkbox" v-model="value" /> {{label}} </label> </div> </div> </template> ``` 在组件中,我们使用了 v-if 指令来根据不同的 type 渲染不同的表单元素。同时,我们使用了 v-model 指令来实现双向数据绑定,将用户输入的值绑定到组件的 value 属性上。 接下来,我们需要在组件中定义 props 和 emit,实现父子组件之间的数据传递。我们可以定义以下 props: ```js props: { label: { type: String, required: true }, type: { type: String, required: true }, options: { type: Array, default: () => [] }, value: { type: [String, Number, Boolean, Array], default: '' } } ``` 在 props 中,我们定义了 label、type、options 和 value 四个属性,分别表示表单元素的标签、类型、选项和值。其中,label 和 type 属性是必须的,而 options 和 value 属性是可选的。 接下来,我们需要在组件中定义 emit,以便向父组件发出事件。我们可以定义以下 emit: ```js emits: { input: ({value}) => true } ``` 在 emit 中,我们定义了 input 事件,该事件会将组件的 value 属性作为参数传递给父组件。在组件内部,我们可以通过 $emit 方法来触发该事件: ```js this.$emit('input', {value: this.value}) ``` 最后,我们可以将 MyForm 组件添加到父组件中,同时通过 props 和 emit 来实现父子组件之间的数据传递。例如,我们可以在父组件中这样使用 MyForm 组件: ```html <template> <div> <my-form label="姓名" type="input" :value="name" @input="handleNameChange" /> <my-form label="性别" type="select" :options="genderOptions" :value="gender" @input="handleGenderChange" /> <my-form label="简介" type="textarea" :value="introduction" @input="handleIntroductionChange" /> <my-form label="爱好" type="checkbox" :value="hobbies" @input="handleHobbiesChange" /> </div> </template> <script> import MyForm from './MyForm.vue' export default { components: { MyForm }, data() { return { name: '', gender: '', introduction: '', hobbies: [] } }, methods: { handleNameChange({value}) { this.name = value }, handleGenderChange({value}) { this.gender = value }, handleIntroductionChange({value}) { this.introduction = value }, handleHobbiesChange({value}) { this.hobbies = value } }, computed: { genderOptions() { return [ {label: '男', value: 'male'}, {label: '女', value: 'female'} ] } } } </script> ``` 在父组件中,我们使用了 MyForm 组件四次,分别表示姓名、性别、简介和爱好四个表单元素。通过 props,我们将父组件中的数据传递给子组件,同时通过 emit,我们将子组件中的数据传递给父组件。在父组件的方法中,我们根据事件参数中的 value 属性来更新父组件的数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值