Vue3学习(一)---模版

164 阅读3分钟

本次任务主要分5个小节学习 1.Vite+Vue+Ts 创建模版

安装Vite 并使用Vite创建了一个新的项目

安装Vite:npm install -g create-vite

创建项目:create-vite vue3ts --template vue-ts //(vue3ts是项目名)

安装依赖:npm install

启动开发服务器:npm run dev

模版主要构成:

<script setup lang="ts">
</script>

<template>
//子组件
</template>
<style scoped>
</style>

2.插值表达式—使用{{}} 包裹 -2.1 基础使用,直接将实例数据属性插入HTML模版

<div>{{ message }}</div>

-2.2 表达式运算 可以插入简易的JavaScript 表达式,简单的判断方式是是否可以合法的写在return 后面

{{ `${num} + ${num+2}` }}

3.V指令 -在HTML模版中以v-开头属性使用形式将响应式数据绑定到DOM元素上火在DOM元素上进行一些操作 常用的指令: v-bind:将实例数据绑定到html元素属性上

    <a v-bind:href="url"></a>
    //简写
    <a :href="url"></a>

v-if:根据bool值条件性渲染元素或组件

v-show:根据bool值条件性显示或隐藏元素

v-on: 元素上绑定事件监听器,触发vue实例中的方法

    <a v-on:click="clickOn"></a>
    //简写
    <a @click="clickOn"></a>

v-model: 表单控件与vue实例数据的双向绑定 v-html:输出html代码

v-if 和v-show 区别是 v-if是根据条件创建或销毁子组件 v-show是 创建后 隐藏或显示子组件

4.样式绑定 为:class 设置一个对象,从而动态的切换 class:

<div :class="{ 'active': isActive }"></div>

绑定的对象并不一定需要写成内联字面量的形式,也可以直接绑定一个对象:

<div :class="activeObject"></div>

对应的对象

const activeObject = reactive({
  active:true,
  'text-danger':false
})

为:class 传一个数组

<div class="static" :class="[activeClass, errorClass]"></div>

内联样式

<div id="app">
    <div :style="{ color: activeColor, fontSize: fontSize + 'px' }">内联样式</div>
</div>

也可以使用数组将多个样式对象应用到一个元素上

<div id="app">
  <div :style="[baseStyles, overridingStyles]">数组内联样式</div>
</div>

5.表单 v-model 指令在表单 <input><textarea><select> 等元素上创建双向数据绑定。

  • text 和 textarea 元素使用 value 属性和 input 事件;
  • checkbox 和 radio 使用 checked 属性和 change 事件;
  • select 字段将 value 作为属性并将 change 作为事件。
<script setup lang="ts">
import { reactive, ref } from 'vue';

const message = ref('hello world!')
const msg2 = ref('textarea 文本')
const names = ref([])
const singalCheck = ref('')
const selected = ref('')
const mutiSelected = ref([])
const options = ref([
{ text: 'One', value: 'A' },
{ text: 'Two', value: 'B' },
{ text: 'Three', value: 'C' }
])
</script>
<template>
  <div>
    <input v-model="message" placeholder="输入文字">
    <p>message is {{ message }}</p>

    <!-- 多行文本 -->
    <textarea v-model="msg2" placeholder="输入多行文本">
    </textarea>
    <p>多行文本{{ msg2 }}</p>
    <!-- 注意在 <textarea> 中是不支持插值表达式的。请使用 v-model 来替代:
    错误<textarea>{{ text }}</textarea>
    正确
    <textarea v-model="text"></textarea> -->

    <!-- 复选框 -->
    <input type="checkbox" id="xiaoming" value="xiaoming" v-model="names">
    <label for="xiaoming">xiaoming</label>
    <input type="checkbox" id="xiaohong" value="xiaohong" v-model="names">
    <label for="xiaohong">xiaohong</label>
    <input type="checkbox" id="lixiao" value="lixiao" v-model="names">
    <label for="lixiao">lixiao</label>
    <p>复选框{{ names.toString() }}</p>
    <!-- 单选按钮 -->
    <input type="radio" id="one" value="One" v-model="singalCheck" />
    <label for="one">One</label>

    <input type="radio" id="two" value="Two" v-model="singalCheck" />
    <label for="two">Two</label>
    <p> 单选按钮{{ singalCheck }}</p>

    <!-- 选择器 -->
    <select v-model="selected">
      <option disabled value="">Please select one</option>
      <option>A</option>
      <option>B</option>
      <option>C</option>
    </select>
    <p>选择器选择的 {{ selected }}</p>

    <!-- v-for 动态渲染选择器 -->
     <select v-model="mutiSelected">
      <option v-for="option in options" :value="option.value" :key="option.value">
        {{ option.text }}
      </option>
    </select>
    <div>Selected: {{ mutiSelected }}</div>
  </div>

</template>

** 修饰符.**

.lazy 默认情况下,v-model 会在每次 input 事件后更新数据 (IME 拼字阶段的状态例外)。 你可以添加 lazy 修饰符来改为在每次 change 事件后更新数据:

<!-- 在 "change" 事件后同步更新而不是 "input" -->
<input v-model.lazy="msg" />

.number 如果你想让用户输入自动转换为数字,你可以在 v-model 后添加 .number 修饰符来管理输入:

<input v-model.number="age" />

如果该值无法被 parseFloat() 处理,那么将返回原始值。

number 修饰符会在输入框有 type="number" 时自动启用。

.trim 如果你想要默认自动去除用户输入内容中两端的空格,你可以在 v-model 后添加 .trim 修饰符:

<input v-model.trim="msg" />