当前位置: 首页 > article >正文

《Vue零基础教程》(3)创建第一个应用案例

1 应用实例

参考官方文档

https://cn.vuejs.org/api/application.html#create-app

示例

const {createApp} = Vue

// 通过createApp创建一个应用实例
const app = createApp({
  /* 选项 */
})
console.log(app)

分析打印结果, 可知

  1. 应用实例是一个对象
  2. 没有_开头的是公开属性/方法
  3. 以_开头的是私有属性/方法(也就是Vue内部使用的)
component: 定义组件
directive: 定义指令
use: 定义插件
---
mount: 挂载
unmount: 卸载

2 挂载

1) 基本语法

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

  • 传入参数: 可以是一个 CSS 选择器字符串(常用) 或者 一个实际的 DOM 元素
  • 返回值: 根组件实例
// 挂载应用, 返回根组件实例
const instance = app.mount('#app')
console.log(instance)

分析结果. 可知

  1. instance是一个Proxy对象
  2. 在选项中定义的内容会被挂载到instance对象上

2) 根组件实例

之前, 我们通过调试工具改变data中的定义的状态时, 视图会响应变化.

如何通过代码实现同样的功能呢?

示例

setTimeout(() => {
  instance.msg = 'world'
}, 1000)

在data中定义的状态会被代理到instance上.

当改变代理对象的状态值时, 可以拦截到set操作, 从而自定义set操作.

在自定义的set操作中更新DOM

3) 响应式原理初步

示例

<script>
  const data = {
    msg: 'hello',
  }

  const pData = new Proxy(data, {
    get: function (target, key) {
      return target[key]
    },
    set: function (target, key, value) {
      target[key] = value
      console.log('更新DOM')
      document.querySelector('#app').innerHTML = value
    },
  })

  setTimeout(() => {
    pData.msg = 'world'
  }, 1000)

  console.log(data, pData)
</script>
  • data模拟原始数据
  • pData模拟代理数据

初次渲染时, 从data中获取数据, 后续修改代理对象的值, 会被拦截到, 并且更新DOM

4) 注意点

  1. 如果不调用.mount(), 不会解析模板
  2. mount()方法应该在应用配置的最后被调用

3 基本选项

1) 状态

data选项

  1. data选项必须是一个函数(在介绍组件时再详细讨论)
  2. 在函数中返回一个对象, 在对象中定义状态
  3. 在data中定义的状态, 可以在模板中使用

示例

const app = createApp({
  data() {
    return {
      msg: 'hello',
    }
  },
})

思考

Q: data选项可以定义成箭头函数吗?

A: 可以, 箭头函数和普通函数的区别在于函数内部this的指向.

  • 普通函数中, this指向当前根组件实例
  • 箭头函数不绑定this, 指向window

如果需要使用箭头函数, 同时也需要能拿到当前实例. 可以通过如下方式

const app = createApp({
  data: (vm) => {
    console.log(vm)
    return {
      msg: 'hello',
    }
  },
})
  • data可以接受一个参数. 该参数指向当前根组件实例

不同类型类型说明

2) 方法

methods选项

  1. 语法: methods中定义方法
  2. 作用: 修改data中的状态

示例

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="../node_modules/vue/dist/vue.global.js"></script>
  </head>
  <body>
    <div id="app">
      <button v-on:click="increment">点击+1: {{count}}</button>
    </div>

    <script>
      const { createApp } = Vue

      const app = createApp({
        data() {
          return {
            count: 0,
          }
        },
        methods: {
          increment() {
            // 该函数中的this指向当前根组件实例instance
            console.log(this)
            this.count++
          },
        },
      })
      const instance = app.mount('#app')
    </script>
  </body>
</html>
  • methods中定义的方法要求是普通函数 在普通函数中通过this拿到当前实例对象

3) 小结

重要结论

  • 状态就是用来 保存 数据的
  • 方法就是用来 修改 数据的

http://www.kler.cn/a/406420.html

相关文章:

  • MYSQL——多表设计以及数据库中三种关系模型
  • Spring Cloud Data Flow快速入门Demo
  • 解决前端页面报错:Not allowed to load local resource
  • UCI Heart Disease Data Set—— UCI 心脏病数据集介绍
  • 30. 并发编程
  • 呼叫中心怎么对接大模型?
  • java使用itext生成pdf
  • shell--第一次作业
  • 微信小程序组件详解:text 和 rich-text 组件的基本用法
  • 定长滑动窗口基础模板题:LeetCode——2379.得到K个黑块的最少涂色次数和643.子数组最大平均数 1
  • 数据结构-树状数组专题(2)
  • 商业物联网:拥抱生产力的未来
  • 2024年9月中国电子学会青少年软件编程(Python)等级考试试卷(六级)答案 + 解析
  • 基于Java Springboot旅游民宿信息管理系统
  • Linux 进程概念与进程状态
  • Elasticsearch实战应用:构建高效搜索与分析平台
  • nodejs基于微信小程序的云校园的设计与实现
  • AFSim脚本学习
  • 未来已来:少儿编程竞赛聚焦物联网,激发创新潜力
  • vue3-基于element-plus实现定制化动态表单及校验
  • CentOS使用中遇到的问题及解决方法
  • java的强,软,弱,虚引用介绍以及应用
  • 提供一个集中式的数字媒体模板库,涵盖各类设计模板(如海报、视频片头、社交媒体帖子等),支持关键词、标签、风格等多维度搜索,帮助用户快速定位所需模板。
  • 【.ner core】 配置使用百度编辑器
  • JavaScript中的this指向问题
  • 容器安全检测和渗透测试工具