首页 > 其他分享 >第三篇 vue - 基础 - 创建一个 Vue 应用、应用实例讲解

第三篇 vue - 基础 - 创建一个 Vue 应用、应用实例讲解

时间:2023-03-28 15:11:06浏览次数:31  
标签:vue createApp app Vue 应用 组件

创建一个 Vue 应用

当前介绍如何在本地搭建 Vue 单页应用。创建的项目将使用基于 Vite 的构建设置,并允许我们使用 Vue 的单文件组件 (SFC)

确保已经安装了最新版本的 Node.js,然后在命令行中运行以下命令

npm init vite vue@latest

这一指令将会安装并执行 create-vue,它是 Vue 官方的项目脚手架工具。你将会看到一些诸如 TypeScript 和测试支持之类的可选功能提示

 Project name: … <your-project-name>
✔ Add TypeScript? … No / Yes
✔ Add JSX Support? … No / Yes
✔ Add Vue Router for Single Page Application development? … No / Yes
✔ Add Pinia for state management? … No / Yes
✔ Add Vitest for Unit testing? … No / Yes
✔ Add Cypress for both Unit and End-to-End testing? … No / Yes
✔ Add ESLint for code quality? … No / Yes
✔ Add Prettier for code formatting? … No / Yes

Scaffolding project in ./<your-project-name>...
Done.
通过以下步骤安装依赖并启动开发服务器

cd <your-project-name>

npm install

npm run dev

通过 CDN 使用 Vue

你可以借助 script 标签直接通过 CDN 来使用 Vue:

通过 CDN 使用 Vue 时,不涉及“构建步骤”。这使得设置更加简单,并且可以用于增强静态的 HTML 或与后端框架集成。但是,你将无法使用单文件组件 (SFC) 语法

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
使用全局构建版本

上面的例子使用了全局构建版本的 Vue,该版本的所有顶层 API 都以属性的形式暴露在了全局的 Vue 对象上。这里有一个使用全局构建版本的例子

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

<div id="app">{{ message }}</div>

<script>
  const { createApp } = Vue
  
  createApp({
    data() {
      return {
        message: 'Hello Vue!'
      }
    }
  }).mount('#app')
</script>
使用 ES 模块构建版本

在本文档的其余部分我们使用的主要是 ES 模块语法。现代浏览器大多都已原生支持 ES 模块。因此我们可以像这样通过 CDN 以及原生 ES 模块使用 Vue

<div id="app">{{ message }}</div>

<script type="module">
  import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
  
  createApp({
    data() {
      return {
        message: 'Hello Vue!'
      }
    }
  }).mount('#app')
</script>

注意我们使用了 <script type="module">,且导入的 CDN URL 指向的是 Vue 的 ES 模块构建版本
启用 Import maps

我们可以使用导入映射表 (Import Maps) 来告诉浏览器如何定位到导入的 vue

<script type="importmap">
  {
    "imports": {
      "vue": "https://unpkg.com/vue@3/dist/vue.esm-browser.js"
    }
  }
</script>

<div id="app">{{ message }}</div>

<script type="module">
  import { createApp } from 'vue'

  createApp({
    data() {
      return {
        message: 'Hello Vue!'
      }
    }
  }).mount('#app')
</script>

应用实例 .createApp

每个 Vue 应用都是通过 createApp 函数创建一个新的 应用实例:

import { createApp } from 'vue'

const app = createApp({
  /* 根组件选项 */
})

根组件

我们传入 createApp 的对象实际上是一个组件,每个应用都需要一个“根组件”,其他组件将作为其子组件

如果你使用的是单文件组件,我们可以直接从另一个文件中导入根组件

大多数真实的应用都是由一棵嵌套的、可重用的组件树组成的

import { createApp } from 'vue'

// 从一个单文件组件中导入根组件
import App from './App.vue'

const app = createApp(App)

大多数真实的应用都是由一棵嵌套的、可重用的组件树组成的 如下

App (root component)
├─ TodoList
│  └─ TodoItem
│     ├─ TodoDeleteButton
│     └─ TodoEditButton
└─ TodoFooter
   ├─ TodoClearButton
   └─ TodoStatistics

挂载应用 .mount

应用实例必须在调用了 .mount() 方法后才会渲染出来

该方法接收一个“容器”参数,可以是一个实际的 DOM 元素或是一个 CSS 选择器字符串

<div id="app"></div>

app.mount('#app')

注意

1、.mount() 方法应该始终在整个应用配置和资源注册完成后被调用

2、不同于其他资源注册方法,它的返回值是根组件实例而非应用实例

DOM 中的根组件模板

<div id="app">
  <button @click="count++">{{ count }}</button>
</div>

import { createApp } from 'vue'

const app = createApp({
  data() {
    return {
      count: 0
    }
  }
})

app.mount('#app')

当根组件没有设置 template 选项时,Vue 将自动使用容器的 innerHTML 作为模板。

应用配置 .config .component

API 参考中浏览应用实例 API 的完整列表

应用实例会暴露一个 .config 对象允许我们配置一些应用级的选项

例如定义一个应用级的错误处理器,它将捕获所有由子组件上抛而未被处理的错误

app.config.errorHandler = (err) => {
  /* 处理错误 */
}

应用实例还提供了一些方法来注册应用范围内可用的资源,例如注册一个组件:component

app.component('TodoDeleteButton', TodoDeleteButton)

这使得 TodoDeleteButton 在应用的任何地方都是可用的

多个应用实例

应用实例并不只限于一个, createApp API 允许你在同一个页面中创建多个共存的 Vue 应用,而且每个应用都拥有自己的用于配置和全局资源的作用域。

const app1 = createApp({
  /* ... */
})

app1.mount('#container-1')

const app2 = createApp({
  /* ... */
})

app2.mount('#container-2')

如果你正在使用 Vue 来增强服务端渲染 HTML,并且只想要 Vue 去控制一个大型页面中特殊的一小部分,应避免将一个单独的 Vue 应用实例挂载到整个页面上,而是应该创建多个小的应用实例,将它们分别挂载到所需的元素上去

标签:vue,createApp,app,Vue,应用,组件
From: https://www.cnblogs.com/caix-1987/p/17265208.html

相关文章

  • vue 生命周期(一)
    下图展示了实例的生命周期。你不需要立马弄明白所有的东西,不过随着你的不断学习和使用,它的参考价值会越来越高。测试代码h5 <!DOCTYPEhtml><html><head><metacharse......
  • Vue的$nextTick完成后获取渲染后的dom数据
    问题是这样滴:需要在div的内容更新后获取div的高度,如果在更新值后马上获取,则高度还是之前的,需要在$nextTick中获取,但是呢这个高度需要返回给上层函数用做比较,所以就想$......
  • ChatGPT在编程方面的应用
    ChatGPT是一种强大的自然语言处理技术,可以让计算机理解和生成自然语言。在编程方面,ChatGPT可以用于各种任务,例如代码自动生成、自然语言查询接口、代码注释和文档生成、代......
  • Redis 在新浪微博中的应用
    Redis在新浪微博中的应用Redis简介1.支持5种数据结构支持strings,hashes,lists,sets,sortedsets string是很好的存储方式,用来做计数存储。sets用于建立索引库非常棒......
  • Redis应用场景
    Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同......
  • vue全家桶进阶之路19:webpack资源打包工具
    Vue.js是一个前端开发框架,它可以帮助我们快速构建单页应用和复杂的交互界面。而Webpack则是一个前端资源打包工具,它可以将多个JavaScript、CSS、HTML、图片等资源打包......
  • webstorm运行Vue项目环境配置(如何从0配置运行一个写好的vue项目)
     1.在Node官网上下载zip安装包。网址:https://nodejs.org/dist/v16.14.0/(需要哪个版本就把/v后的版本号改成哪个版本)  2.下载完成后解压至需要的文件夹下。  3......
  • vue3 中 pinia 的 state 修改模版绑定的 state 数据没更新?
    解决方案:给state增加 computedimport{useLayerStore}from"@/stores/";constlayer=useLayerStore();constlayerList=computed(()=>layer.layerList);......
  • 超全、超简单Vue微信公众号授权登录指南
    <template> <divid="app"> <h1>微信授权登陆</h1> <div> <div> <span>手机号</span>&nbsp;&nbsp; <inputtype="number":value="account"placeholder="......
  • vue2实现路由懒加载
    以下内容仅供学习使用安装@babel/plugin-syntax-dynamic-import插件。1.1使用npm安装:npminstall--save-dev@babel/plugin-syntax-dynamic-import1.2使用yarn安装......