Vue零基础教程|从前端框架到GIS开发系列课程(二)

前文

0帧起手《Vue零基础教程》,从前端框架到GIS开发系列课程

https://mp.csdn.net/mp_blog/creation/editor/144398425

应用实例

参考官方文档:https://cn.vuejs.org/api/application#create-app

示例​​​​​​​

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

分析打印结果, 可知

1应用实例是一个对象

2没有_开头的是公开属性/方法

3以_开头的是私有属性/方法(也就是Vue内部使用的)​​​​​​​

复制代码
component: 定义组件directive: 定义指令use: 定义插件---mount: 挂载unmount: 卸载

挂载

  1. 基本语法

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

●传入参数: 可以是一个 CSS 选择器字符串(常用) 或者 一个实际的 DOM 元素

●返回值:根组件实例​​​​​​​

复制代码
// 挂载应用, 返回根组件实例const instance = app.mount('#app')console.log(instance)

分析结果. 可知

1instance是一个Proxy对象

2在选项中定义的内容会被挂载到instance对象上

  1. 根组件实例

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

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

示例​​​​​​​

复制代码
setTimeout(() => {  instance.msg = 'world'}, 1000)

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

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

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

  1. 响应式原理初步

示例​​​​​​​

复制代码
<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

  1. 注意点

1如果不调用.mount(), 不会解析模板

2mount()方法应该在应用配置的最后被调用

基本选项

  1. 状态

data选项

1data选项必须是一个函数(在介绍组件时再详细讨论)

2在函数中返回一个对象, 在对象中定义状态

3在data中定义的状态, 可以在模板中使用

示例​​​​​​​

复制代码
const app = createApp({  data() {    return {      msg: 'hello',    }  },})

思考

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

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

●普通函数中, this指向当前根组件实例

●箭头函数不绑定this, 指向window

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

●data可以接受一个参数. 该参数指向当前根组件实例

不同类型类型说明

  1. 方法

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拿到当前实例对象

  1. 小结

重要结论

●状态就是用来保存数据的

●方法就是用来修改数据的

相关推荐
打小就很皮...20 分钟前
HBuilder 发行Android(apk包)全流程指南
前端·javascript·微信小程序
集成显卡1 小时前
PlayWright | 初识微软出品的 WEB 应用自动化测试框架
前端·chrome·测试工具·microsoft·自动化·edge浏览器
前端小趴菜052 小时前
React - 组件通信
前端·react.js·前端框架
Amy_cx2 小时前
在表单输入框按回车页面刷新的问题
前端·elementui
dancing9993 小时前
cocos3.X的oops框架oops-plugin-excel-to-json改进兼容多表单导出功能
前端·javascript·typescript·游戏程序
后海 0_o3 小时前
2025前端微服务 - 无界 的实战应用
前端·微服务·架构
Scabbards_3 小时前
CPT304-2425-S2-Software Engineering II
前端
小满zs3 小时前
Zustand 第二章(状态处理)
前端·react.js
程序猿小D3 小时前
第16节 Node.js 文件系统
linux·服务器·前端·node.js·编辑器·vim
萌萌哒草头将军3 小时前
🚀🚀🚀Prisma 发布无 Rust 引擎预览版,安装和使用更轻量;支持任何 ORM 连接引擎;支持自动备份...
前端·javascript·vue.js