5. 简单说一说uniapp中的语法吧

前言

如果你 知道Vue3并且对Vue3的语法有一定了解,请跳过这一章,由于后续项目主要是基于Vue3+TypeScript,因此提前简单概述一些Vue3的基础语法~

本文的目的是 期望通过对本文的阅读后能对Vue3的每个语法有一个简单的印象,至少要知道文中常见语法的作用是什么,算是进行比较初级的扫盲吧;

概述

阅读时间:约7~10分钟;

本文重点:

  • 通过本文你可以知道一些Vue3中的基本语法与结构;
  • 大致知道一下常见语法的作用是什么;

正文

看一个例子吧,我们通过示例代码进行说明,例子如下:

<template>
    <view class="app-container">
          <u-skeleton :rows="3" :title="false" loading />
    </view>
</template>

<script lang="ts" setup>
import { ref, type Ref } from 'vue';
const swiperList1 = ref([
    'https://cdn.uviewui.com/uview/swiper/swiper1.png',
    'https://cdn.uviewui.com/uview/swiper/swiper2.png',
    'https://cdn.uviewui.com/uview/swiper/swiper3.png',
]);

const loading = ref(false);

function refresh() {
    loading.value = true;

    setTimeout(() => {
        loading.value = false;
    }, 1000);
}
</script>

<style scoped lang="scss">
.app-container {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
}
</style>

这段代码是一个简单的uniapp中的某个页面,从整体结构上看看代码可以分成三部分,分别是由template,script,style三块组成(PS:这三块可以约等于视同前端领域中的HTML+Javascript+CSS)

template

template,类似于传统前端中的html部分,它主要的作用是制作页面的骨架、结构

思考一个场景,当我们前端拿到一张设计稿后首先应该做什么?肯定是先思考页面的整体结构,比如整体是上下结构还是左右结构,只有结构上思考完善了才考虑接下来的部分,否则一旦存在没有考虑到的情况,当某个功能点出现html结构不支持的时候那问题就大了...

静态显示

什么是静态显示?在开发中存在少部分页面是纯静态展示页面的,这部分页面不需要与后台交互,这类写法比较简单,直接写就是了

<template>
    <view class="app-container">
        <view class="app-title">这是本页面的标题</view>
    	<view class="app-content">这是本页面的内容</view>
    </view>
</template>

很简单,直接写,不需要其他配置

动态显示

和静态显示对应,动态显示是绝大多数页面上的显示方式,比如用户名显示,这个取决于登录用户是哪一个;

动态显示需要和script结合使用,在script存储变量名字,然后将变量嵌入到template里,进而变量的值是什么,页面上则显示什么;

双花括号

嵌入的核心语法:双花括号 语法,它的作用就是将变量嵌入到template中,如下

<template>
    <view class="app-container">
        <view class="app-title">这是本页面的标题</view>
		<view class="app-content">{{ text }}</view>
    </view>
</template>

<script lang="ts" setup>
const text="这是本页面的内容"
</script>

此时显示在页面上的text的区域文字是:这是本页面的内容

v-if(条件渲染)

除了正常的显示外,有这么一种情况,有时候需要对显示的内容进行一个判断,如果有值显示内容,如果没有值则显示“暂无内容”,这种v-if就起到作用了;

它书写的位置在template里的标签上,如下:

<template>
    <view class="app-container">
    	<view v-if="swiperList1.length>2">{{ text }}</view>
    	<view v-else-if="swiperList1.length===1">{{ text }}</view>
    	<view v-else>无显示内容</view>
    </view>
</template>

<script lang="ts" setup>
import { ref } from 'vue';

const text="这是本页面的内容"
const swiperList1 = ref([
    'https://cdn.uviewui.com/uview/swiper/swiper1.png',
    'https://cdn.uviewui.com/uview/swiper/swiper2.png',
    'https://cdn.uviewui.com/uview/swiper/swiper3.png',
]);
</script>

这里出现了关于v-if的一套用法,一共三个,分别是:v-if,v-else-if,v-else,含义也很好理解,哪个后面的条件符合就显示那个内容,如果都不满足,则显示v-else里面的

v-for(列表渲染)

除了条件渲染,还有这么种场景,页面上需要重复显示一列内容,如新闻列表,对于这种我们可以使用v-for进行重复显示

<template>
    <view class="app-container">
        <view class="app-title">这是本页面的标题</view>
        <view v-for="item in newsList" :key="item.id">{{ item.title }}</view>
    </view>
</template>

<script lang="ts" setup>
import { ref, type Ref } from 'vue';

const newsList = ref([
    {
        title: '新闻标题1',
        id: 1,
    },
    {
        title: '新闻标题2',
        id: 2,
    },
    {
        title: '新闻标题3',
        id: 3,
    },
]);

</script>

这样就可以快速显示三条信息

script

script,类似于传统前端中的Javascript部分,它的主要作用是进行逻辑处理,如动态获取页面内容

ref

ref,作用是 将变量的值定义为实时可变的,以上方双花括号为例

<template>
    <view class="app-container">
    	<view class="app-content">{{ text }}</view>
        <view class="app-content">{{ text1 }}</view>
    </view>
</template>

<script lang="ts" setup>
  import { ref } from 'vue';
  
  const text="这是本页面的内容";
  const text1=ref("这是本页面的内容");
</script>

这两个最大的区别是,text1显示的内容,会随着其值的变化而变化,text则是不会,举个场景例子吧;

我们页面上显示的内容往往是通过api从后端获取的,通过ref定义的值显示在页面上时,它能随时动态改变,比如

<template>
    <view class="app-container">
    	<view class="app-content">{{ text }}</view>
        <view class="app-content">{{ text1 }}</view>
    </view>
</template>

<script lang="ts" setup>
  import { ref } from 'vue';
  
  let text="这是本页面的内容";
  const text1=ref("这是本页面的内容");

  setTimeout(()=>{
    // 修改值必须修改其value值,不能直接text1="xxxx"
    text1.value="修改后的值"

    // 不使用ref则不需要使用到value,可直接修改
    text="修改后的值"
  },2000)
</script>

2秒后,text1显示在页面上的值会从"这是本页面的内容"变成"修改后的值", 如果不使用ref则不管怎么修改text,显示在页面上的值仍然是"这是本页面的内容";

computed

计算属性,computed,其作用是被动的,动态的,改变值,可能不太好理解,举个例子吧,比如我们要显示的是列表中一共有多少行,如果使用ref那么我们需要这么写

<template>
    <view class="app-container">
        <view class="app-title">{{ number }}</view>
    </view>
</template>

<script lang="ts" setup>
import { ref, computed } from 'vue';

const data: any = ref([]);
const number = ref(0);

setTimeout(() => {
    data.value = [
        {
            name: '1',
            value: 1,
        },
        {
            name: '2',
            value: 2,
        },
    ];

    number.value = data.value.length;
}, 2000);
</script>

如果使用computed就简单一些,它能被动的,根据值进行动态变化

<template>
    <view class="app-container">
        <view class="app-title">{{ number }}</view>
    </view>
</template>

<script lang="ts" setup>
import { ref, computed } from 'vue';

const data: any = ref([]);
const number = computed(() => data.value.length);

setTimeout(() => {
    data.value = [
        {
            name: '1',
            value: 1,
        },
        {
            name: '2',
            value: 2,
        },
    ];
}, 2000);
</script>

watch

和computed不同,watch的目的是主动的监听某一个变量,当这个变量发生变化时以便我们主动的做出一些应对措施;

<template>
    <view class="app-container">
        <view class="app-title">{{ number }}</view>
    </view>
</template>

<script lang="ts" setup>
import { ref, watch } from 'vue';

const data: any = ref([]);
const number = ref(0);

setTimeout(() => {
    data.value = [
        {
            name: '1',
            value: 1,
        },
        {
            name: '2',
            value: 2,
        },
    ];
}, 2000);

// 监听data的变化
watch(
    () => data.length,
    (value) => {
        // 具体的应对措施
        number.value = value.length;
    }
);
</script>

style

style,类似于传统前端中的CSS部分,它的主要作用是将骨架template以更美观的形式展现到用户面前,和传统CSS不同的是,在Vue中的style是支持三方库的,比如sass,less

lang

其作用是指的css的类型,比如指的style中的语法是less


<style lang="less">
.app-container {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
}

.app-title {
    font-size: 24px;
    font-weight: bold;
}
</style>

值得注意的是,如果想要使用这些三方库并没有天然的集成在里面,使用前要进行安装

scoped

scoped,其作用是防止样式污染,比如,我们在a页面存在一个样式名叫做"app-container",然后在b页面也存在一个样式名叫做"app-container",这是该怎么办?通常有两种做法

  • 第一种:修改掉其中一个样式名;
  • 第二种:都加上scoped,加上scoped之后,Vue会主动的给每一个样式加上唯一的标签,使其不会污染到别的页面里面的样式;
<style scoped>
.app-container {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
}

.app-title {
    font-size: 24px;
    font-weight: bold;
}
</style>

本章小结

本章简单的分享了一下在Vue3中常用到的几种语法,通过本章我们知道了:

  • 一个正常的Vue或者说uniapp页面通常包含三部分,别分是:template,script,style;
  • template约等于传统前端开发的html,是页面的骨架;
  • script约等于传统前端开发的Javascript,是页面上的逻辑;
  • style约等于传统前端开发中的css,是用来丰富页面上显示效果;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/617717.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 13 系统自定义安全水印

效果 源码实现 frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java public final void showSafeModeOverlay() {View v LayoutInflater.from(mContext).inflate(com.android.internal.R.layout.safe_mode, null);WindowManager.Layout…

《C++学习笔记---初阶篇6》---string类 上

目录 1. 为什么要学习string类 1.1 C语言中的字符串 2. 标准库中的string类 2.1 string类(了解) 2.2 string类的常用接口说明 2.2.1. string类对象的常见构造 2.2.2. string类对象的容量操作 2.2.3.再次探讨reserve与resize 2.2.4.string类对象的访问及遍历操作 2.2.5…

宝塔面板怎么解决nginx跨域问题

1.找到宝塔的nginx配置文件 宝塔有一点不同&#xff0c;nginx配置文件不在nginx的安装目录中&#xff0c;应当去/www/server/panel/vhost/nginx找到 2.添加你要跨域的地址 location /api {proxy_pass http://localhost:8080;proxy_set_header Host $host;proxy_set_header X-…

爱普生推出5G基站可用耐高温高稳定性温补晶振

爱普生推出了六款新的温补晶振型号:TG7050CKN&#xff0c;TG7050SKNTG7050CMN&#xff0c;TG7050SMN&#xff0c;TG-5510CA&#xff0c;TG-5511CA。这几款的特点就是耐高温温度可达105℃C高温&#xff0c;而且都是高稳定性温补晶振&#xff0c;而且都是7050尺寸&#xff0c;这个…

map 和 set 的介绍和简单使用

目录 1. 序列式容器和关联式容器 2. 键值对 2.1. make_pair 3. 树形结构的关联式容器 3.1. set (Key 模型) 3.1.1. std::set::find 和 std::set::count 3.2. map (Key-Value 模型) 3.2.1. std::map::insert 3.2.2. std::map::operator[] 3.3. multiset 3.4.1. std::…

[Java EE] 文件IO(一):文件概念与文件系统操作

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …

vscode怎么设置背景图片?

vscode背景图片是可以自己设置的&#xff0c;软件安装后默认背景的颜色是黑色的&#xff0c;这是默认的设计&#xff0c;如果要修改背景为指定的图片&#xff0c;那么我们需要安装插件&#xff0c;然后再通过代码来设置背景图片的样式&#xff0c;下面我们就来看看详细的教程。…

大数据交通行政执法监测系统

交通行政执法监测系统应用系统按照监测主体可分为&#xff1a;出租车交通违法监测&#xff0c;客车交通违法监测&#xff0c;货车、危化品车辆交通违法监测&#xff0c;非法营运车辆监测。功能模块涵盖&#xff1a;特征识别、档案查询、预警分析等。 &#xff08;1&#xff09;…

java中EQ、NE、GE、GT、LE、LT

关系运算符 包括EQ、NE、GE、GT、LE、LT几个&#xff0c;关系运算符返回的是真“True”或假“False”。 eq&#xff08;Equal to&#xff09; 等 运算符 &#xff0c;如果运算符两边相同则返回真&#xff0c;否则返回假&#xff1b; ne&#xff08;Not Equal to&#xff09; 不…

力扣HOT100 - 55. 跳跃游戏

解题思路&#xff1a; class Solution {public boolean canJump(int[] nums) {int n nums.length;int maxReach 0;// 正常来说每次至少跳一格&#xff0c;所以最多循环n次for (int i 0; i < n; i) {if (i > maxReach) return false;// 这种情况代表遇到了0&#xff0…

使用train.py----yolov7

准备工作 在训练之前&#xff0c;数据集的工作和配置环境的工作要做好 数据集&#xff1a;看这里划分数据集&#xff0c;训练自己的数据集。_划分数据集后如何训练-CSDN博客 划分数据集2&#xff0c;详细说明-CSDN博客 配置环境看这里 从0开始配置环境-yolov7_gpu0是inter g…

11、关系运算符、逻辑运算符(讲解 和 的区别)、赋值表达式、三目表达式、运算符优先级(超详细版本)+结合性的分析

这里写目录标题 一、关系运算符&#xff08;比较运算符&#xff09;二、⭐逻辑运算符1、 && 和 &2、|| 或 |3、&#xff01;4、^ 三、赋值运算符四、三目运算符&#xff08;条件运算符&#xff09;五、运算符优先级 在讲之前先明确几个概念&#xff1a; 1、单目运算…

【Arduino】ESP32/ESP8266 JSON格式解析

目录 1、JSON 2、JSON语法格式 基本概念&#xff1a; 语法规则&#xff1a; 数据类型&#xff1a; 示例&#xff1a; 3、JSON解析 单一对象JSON解析&#xff08;无嵌套&#xff09; JSON数组解析 使用ArduinoJson官网在线工具解析JSON信息 ESP8266闪存存储的JSON解析…

VScode 修改 Markdown Preview Enhanced 主题与字体

VScode 修改 Markdown Preview Enhanced 主题与字体 1. 修改前后效果对比2. 修改主题2.1 更改默认主题2.2 修改背景色 3. 修改字体 VS Code基础入门使用可查看&#xff1a; VS Code 基础入门使用&#xff08;配置&#xff09;教程 其他Vs Code 配置可关注查看&#xff1a; Vs C…

ElasticSearch 与 OpenSearch:拉开性能差距

Elasticsearch 与 OpenSearch&#xff1a;扩大性能差距 对于任何依赖快速、准确搜索数据的组织来说&#xff0c;强大、快速且高效的搜索引擎是至关重要的元素。对于开发人员和架构师来说&#xff0c;选择正确的搜索平台可以极大地影响您的组织提供快速且相关结果的能力。在我们…

docker(二):Centos安装docker

文章目录 1、安装docker2、启动docker3、验证 官方文档&#xff1a;https://docs.docker.com/engine/install/centos/ 1、安装docker 下载依赖包 yum -y install gcc yum -y install gcc-c yum install -y yum-utils设置仓库 yum-config-manager --add-repo http://mirrors…

在xAnyLabeling中加载自己训练的yolov8s-obb模型进行半自动化标注

任务思路&#xff1a; 先使用xAnyLabeling标注一部分样本&#xff0c;训练出v1版本的yolov8-obb模型&#xff0c;然后加载yolov8-obb模型到xAnyLabeling中对其余样本进行半自动化标注。节省工作量。 任务流程&#xff1a; 1.准备xAnyLabeling标注工具 下载代码&#xff0c;…

Linux 第二十八章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

利用PS在不伤背景的前提下根据颜色去除图像上不想要的内容

下面为一个例子&#xff0c;去除图像上红色的虚线 Step1.用套索工具框选带有颜色的部分 Step2.切换到魔术棒工具&#xff0c;上端选项中&#xff0c;点击与选区交叉&#xff0c;连续这一项不要勾选 Step3.在需要去除的部分点击一下即可在框选范围内选中所有同颜色的区域&#x…

【IC前端虚拟项目】验证环境env与base_teat思路与编写

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 上一篇里解决了最难搞的axi_ram_model,接下来呢就会简单又常规一些了,比如这一篇要说的env和base_test的搭建。在这里我用了gen_uvm_tb脚本: 【前端验证】验证自动化脚本的最后一块拼图补全——gen_t…