跟着AI学vue第九章

news/2025/2/26 14:28:24

第九章:Vue 生态与跨端开发

1. 深入探索 Vue 生态工具

Vue 生态就像是一个热闹的“软件小镇”,里面有各种各样的工具和资源,能帮助你把 Vue 项目打造得更好。

Vue CLI 高级用法

Vue CLI 就像是小镇里的“建筑规划师”,一开始它能帮你快速搭建项目框架。但它还有很多高级功能,比如插件管理。

想象你要给房子添加一个新的“功能房间”,在项目里就是添加新的功能模块。比如你想给项目加上 ESLint 代码检查功能,让代码更规范。在项目根目录下,你可以用命令告诉 Vue CLI 来添加这个“房间”:

vue add eslint

运行这个命令后,Vue CLI 就会自动下载 ESLint 相关的依赖,并且配置好项目里的 ESLint 规则,就像规划师按照你的要求把新房间设计并建造好。

Vue Test Utils 进行组件测试

开发代码就像制造产品,你得确保每个“零件”(组件)都能正常工作。Vue Test Utils 就是“质量检测员”,专门检查组件的功能。

比如有一个简单的按钮组件 MyButton.vue

<template>
  <button @click="handleClick">{{ label }}</button>
</template>

<script setup>
import { ref } from 'vue';
const props = defineProps({
  label: {
    type: String,
    default: 'Click me'
  }
});
const handleClick = () => {
  console.log('Button clicked');
};
</script>

现在用 Vue Test Utils 来测试这个按钮点击功能是否正常:

javascript">import { mount } from '@vue/test-utils';
import MyButton from './MyButton.vue';

describe('MyButton', () => {
  it('should call handleClick when clicked', () => {
    // 挂载组件
    const wrapper = mount(MyButton);
    // 监视 handleClick 方法
    const spy = jest.spyOn(wrapper.vm, 'handleClick');
    // 触发按钮点击事件
    wrapper.find('button').trigger('click');
    // 检查 handleClick 方法是否被调用
    expect(spy).toHaveBeenCalled();
  });
});

在这个测试里,我们用 mount 把组件“安装”好,用 jest.spyOn 盯着 handleClick 方法,然后模拟点击按钮,最后检查这个方法是不是真的被调用了。

2. 跨端开发实践

跨端开发就像是让一个演员能在不同的舞台(平台)上表演,让你的应用可以在网页、手机 APP 等多个平台运行。

Vue + Taro 开发多端应用

Taro 就像是一个“语言翻译官”,能把你用 Vue 写的代码翻译成不同平台能懂的“语言”。

首先,你得安装 Taro 的“翻译工具”:

npm install -g @tarojs/cli

然后创建一个新的项目:

taro init my-taro-vue-project --template vue3

在项目里创建一个简单的页面组件 index.vue

<template>
  <view>
    <text>{{ message }}</text>
    <button @click="changeMessage">Change Message</button>
  </view>
</template>

<script setup>
import { ref } from 'vue';
const message = ref('Hello, Taro!');
const changeMessage = () => {
  message.value = 'Message changed!';
};
</script>

最后,用 Taro 把代码“翻译”成不同平台的代码:

# 编译成 H5 代码
taro build --type h5 --watch
# 编译成微信小程序代码
taro build --type weapp --watch

这样,同样的代码就能在 H5 网页和微信小程序上运行了。

Vue + NativeScript 开发原生 APP

NativeScript 就像是一个神奇的“变身器”,能把 Vue 代码变成原生的手机 APP,让 APP 有和原生应用一样的性能和体验。

先安装 NativeScript 的“变身工具”:

npm install -g nativescript

创建一个新的 NativeScript + Vue 项目:

ns create my-vue-native-app --template @nativescript/template-vue

app/components/HelloWorld.vue 组件里写点代码:

<template>
  <Page>
    <StackLayout>
      <Label :text="message" />
      <Button text="Click me" @tap="changeMessage" />
    </StackLayout>
  </Page>
</template>

<script setup>
import { ref } from 'vue';
const message = ref('Hello from NativeScript + Vue!');
const changeMessage = () => {
  message.value = 'Button clicked!';
};
</script>

运行命令在模拟器或真机上运行 APP:

ns run ios # 运行 iOS 模拟器
ns run android # 运行 Android 模拟器

第九阶段:Vue 前沿技术与研究

1. Vue 3 新特性深入研究

Vue 3 就像是一辆新升级的跑车,有很多新的强大功能。

Composition API 高级应用

Composition API 能让你把相关的代码逻辑“打包”在一起,就像把工具分类放在不同的盒子里,方便管理和复用。

比如你有一个计数器和一个定时器的功能,用 Composition API 可以这样写:

<template>
  <div>
    <p>Count: {{ count }}</p>
    <p>Time: {{ time }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

<script setup>
import { ref, onMounted, onUnmounted } from 'vue';

// 计数器逻辑
const count = ref(0);
const increment = () => {
  count.value++;
};

// 定时器逻辑
const time = ref(new Date().toLocaleTimeString());
let intervalId;
onMounted(() => {
  intervalId = setInterval(() => {
    time.value = new Date().toLocaleTimeString();
  }, 1000);
});
onUnmounted(() => {
  clearInterval(intervalId);
});
</script>

这里把计数器和定时器的逻辑分开写,以后如果要复用其中一个功能,直接拿对应的代码块就行。

Suspense 和 Teleport 的应用

Suspense 就像是餐厅的“餐前小零食”,在异步组件加载时,先给用户显示一个提示,等组件加载好再显示真正的内容。

比如有一个异步组件 AsyncComponent.vue

<template>
  <div>Async Component</div>
</template>

<script setup>
import { onMounted, ref } from 'vue';
const isLoading = ref(true);
onMounted(() => {
  setTimeout(() => {
    isLoading.value = false;
  }, 2000);
});
</script>

在父组件里用 Suspense 包裹这个异步组件:

<template>
  <div>
    <Suspense>
      <template #fallback>
        <p>Loading...</p>
      </template>
      <AsyncComponent />
    </Suspense>
  </div>
</template>

<script setup>
import AsyncComponent from './AsyncComponent.vue';
</script>

Teleport 就像是一个“传送门”,能把组件里的内容传送到 DOM 树的其他位置。

比如有一个模态框组件 Modal.vue

<template>
  <teleport to="body">
    <div class="modal" v-if="isOpen">
      <div class="modal-content">
        <h2>Modal Title</h2>
        <p>Modal content...</p>
        <button @click="isOpen = false">Close</button>
      </div>
    </div>
  </teleport>
</template>

<script setup>
import { ref } from 'vue';
const isOpen = ref(false);
const openModal = () => {
  isOpen.value = true;
};
</script>

在父组件里调用这个模态框:

<template>
  <div>
    <button @click="openModal">Open Modal</button>
    <Modal />
  </div>
</template>

<script setup>
import Modal from './Modal.vue';
</script>
2. 参与开源项目与技术分享

参与开源项目就像是加入一个大型的团队游戏,你可以和全球的开发者一起合作,为项目贡献自己的力量。你可以在 GitHub 上找到喜欢的 Vue 开源项目,比如一些组件库或者工具,然后看看有没有适合自己的任务,比如修复一个小 bug 或者添加一个新功能。

技术分享就像是把你在游戏里的经验和技巧告诉其他玩家。你可以在博客、论坛或者线下活动中分享自己在 Vue 开发中的经验、遇到的问题和解决方案等。这样不仅能帮助其他开发者,也能让自己对技术理解得更深刻。


http://www.niftyadmin.cn/n/5868822.html

相关文章

DeepSeek 提示词:基础结构

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

【设计原则】开闭原则

开闭原则&#xff08;OCP&#xff09;在C#中的实践&#xff1a;如何设计可扩展的代码 一、什么是开闭原则&#xff1f;二、未遵循开闭原则的案例三、用开闭原则重构代码四、进一步优化&#xff1a;动态加载操作五、开闭原则的优势六、适用场景七、总结 一、什么是开闭原则&…

【GO】学习笔记

目录 学习链接 开发环境 开发工具 GVM - GO多版本部署 GOPATH 与 go.mod go常用命令 环境初始化 编译与运行 GDB -- GNU 调试器 基本语法与字符类型 关键字与标识符 格式化占位符 基本语法 初始值&零值&默认值 变量声明与赋值 _ 下划线的用法 字…

halcon三维点云数据处理(二十七)remove_bin_for_3d_object_localization

目录 一、remove_bin_for_3d_object_localization代码第一部分二、remove_bin_for_3d_object_localization代码第二部分三、效果图一、remove_bin_for_3d_object_localization代码第一部分 1、读图构建3D模型。 2、一次二值化选取区域。 3、一次和背景差值选取区域。 4、在二维…

K8S能部署大数据集群吗?为什么?K8S的HPA功能可以作为大数据处理消息积压的问题(Kafka的分区)

K8S 即 Kubernetes&#xff0c;是可以部署大数据集群的 &#xff0c;原因如下 资源管理与调度优势&#xff1a;K8S 拥有强大的资源管理和调度能力。大数据集群运行时&#xff0c;不同组件对资源需求差异大&#xff0c;像计算密集型的 MapReduce 任务和存储密集型的 HDFS。K8S …

方法调用重点知识

方法里调方法&#xff0c;通过大括号内直接声明“方法名称&#xff08;&#xff09;”的方式&#xff0c;也是对象来调用方法的&#xff0c;只能调用本类拥有的方法&#xff0c;都是通过对象.来进行调用&#xff0c;只不过省略了this而已&#xff0c;别人即其他类的方法只能通过…

二、环 Ring

文章目录 一、环的定义二、环的分类与变种1、交换环2、含单位元的环3、零环4、非交换环5、整环6、域 三、环的性质与应用四、环与群和域的对比 一、环的定义 一个集合 R 被称为一个环&#xff0c;如果它满足以下条件&#xff1a; 对于 加法 满足&#xff1a; 闭合性&#xff1…

2025 PHP授权系统网站源码

2025 PHP授权系统网站源码 安装教程&#xff1a; PHP7.0以上 先上传源码到服务器&#xff0c;然后再配置伪静态&#xff0c; 访问域名根据操作完成安装&#xff0c; 然后配置伪静态规则。 Ngix伪静态规则&#xff1a; location / { if (!-e $request_filename) { rewrite …