首页 > 其他分享 >前端学习-vue视频学习003-setup(重要)

前端学习-vue视频学习003-setup(重要)

时间:2024-02-29 23:00:24浏览次数:35  
标签:function vue name age 003 let setup

学习教程-尚硅谷视频

将原vue2的格式改为vue3---使用setup

要点:

  • this在vue3中被弱化,setup函数中不能使用this
  • 定义数据时,如果不是响应式的(暂时还不是很理解响应式),不会触发页面的变化
  • vue3支持一个标签直接写多次,如
<template>
    <Person/>   
    <Person/>
    <Person/>
</template>
  • 在setup中使用return,才能将数据和方法交到外部使用
    Person.vue
<template>
    <div class="person">
        <h2>name:{{ name }}</h2>
        <h2>age:{{ age }}</h2>
        <button @click="changeName">changeName</button>
        <button @click="changeAge">changeAge</button>
        <button @click="showTel">click</button>
    </div>
</template>

<script lang="ts">
    export default {
        name:'Person',
        setup() {
            // setup函数中的this是undefined
            // 数据
            let name = 'ssss' // 非响应式
            let age = 20 // 非响应式
            let tel = '1234567889' // 非响应式

            // 方法
            function changeName() {
                name = '3dfgb' // 这样修改,页面不会变化,但name确实改了
            }
            function changeAge() {
                age++ // 这样修改,页面不会变化,但age确实改了
            }
            function showTel() {
                alert(tel)
            }
            return {name,age,changeName,changeAge,showTel}
        }
    }
</script>

<style scoped>
    .person {
        background-color: skyblue;
        box-shadow: 0 0 10px;
        border-radius: 10px;
        padding: 20px;
    }
    
    button {
        margin : 0 5px;
    }
</style>

setup的返回值

  • 对象
    return {name,age,changeName,changeAge,showTel}
  • 也可以是渲染函数
    ·return ()=> 'lalala'

data、method(vue2语法) 和 setup(vue3语法)同时存在

  • 由于setup加载得更快,因此data里可以读取到setup里的数据
  • setup无法读取到data里的数据

setup 语法糖

语法糖可以省略setup()和return返回值,默认返回数据和方法

<script lang="ts">
    export default {
        name:'Person',
    }
</script>

<script lang="ts" setup>
    let name = 'ssss' // 非响应式
    let age = 20 // 非响应式
    let tel = '1234567889' // 非响应式
    // 方法
    function changeName() {
        name = '3dfgb' // 这样修改,页面不会变化,但name确实改了
    }
    function changeAge() {
        age++ // 这样修改,页面不会变化,但age确实改了
    }
    function showTel() {
        alert(tel)
    }
</script>

控制组件名称

  • 方式1
<script lang="ts">
    export default {
        name:'Person',
    }
</script>
  • 方式2
    在script标签增加name属性+借助插件
    首先在终端安装开发依赖
    npm i vite-plugin-vue-setup-extend -D
    安装成功后,修改vite.config.ts文件,引入刚刚下载的依赖
    import xxx from 'vite-plugin-vue-setup-extend'(xxx是组件名称,可以自己起名),同时在插件语句中追加调用,整体如下
// vite.config.ts
import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import VueSetupExtend from 'vite-plugin-vue-setup-extend'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    VueSetupExtend()
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})

此时就可以在标签中增加name

<script lang="ts" setup name="aaaaaa">
    let name = 'ssss' // 非响应式
    let age = 20 // 非响应式
    let tel = '1234567889' // 非响应式
    // 方法
    function changeName() {
        name = '3dfgb' // 这样修改,页面不会变化,但name确实改了
    }
    function changeAge() {
        age++ // 这样修改,页面不会变化,但age确实改了
    }
    function showTel() {
        alert(tel)
    }
</script>

效果如图

  • 方式3
    一般情况下,组件名称会展示为文件名(如果不是特殊设置)
    因此只要命名好文件就可以了

标签:function,vue,name,age,003,let,setup
From: https://www.cnblogs.com/ayubene/p/18045629

相关文章

  • JS/Vue 学习小记
    可能要写点轮子。。。先学学前端知识吧,记录一下。遍历:for(letiofS){i...}for(letiinS){S[i]...}JS是弱类型的语言。目前感觉到的特性有:数组不同元素可以是不同类型的函数返回值不需要声明,直接functionF()就可以JS中对象用大括号表示,成员可以是各种类型,包......
  • Vuex系列之(七)getters配置项
    getters配置项概念:getters配置项并不是必须要使用的,当state中的数据需要经过加工后再使用时,可以使用getters加工。应用场景:运算逻辑复杂而且需要复用,用于抽取基于state中数据的公共运算在store.js中追加getters配置......//准备getters——用于加工state中的数据cons......
  • Vuex系列之(六)Vuex Devtools
    VuexDevtools由于Vue和Vuex都是由官方团队开发的,Vue的Devtools和Vuex的Devtools是合二为一的组件页签、Vuex页签、事件页签事件页签:观察自定义事件和全局事件总线中的事件VuexDevtools仅仅捕获mutations中的动作,actions中的动作是不会捕获的context:actions中的上下文......
  • Vuex系列之(五)求和案例
    求和案例//index.jsimportVuefrom'vue'importVuexfrom'vuex'Vue.use(Vuex)constactions={ //对于不包含业务逻辑也不进行Ajax请求转发的操作可以不经过actions,直接调用mutations中的方法即可 //jia(context,value){ // console.log('actions被调用了',conte......
  • Vue UI组件库系列之概述
    概述UI组件库:提供了一些如输入框、布局、按钮等在网页UI布局中常用的元素,并将这些元素以组件的形式提供给我们。一般会说UI组件库是基于哪个框架【Vue/React/...】的、PC端/移动端什么项目适合用UI组件库,什么项目不适合?【UI组件库的应用场景】不适合【页面中包含很多定制化、......
  • VuePress
    VuePress一、部署创建项目文件夹在任意目录下创建文件夹mydocs注:路径中不要包含中文安装VuePressnpminstallvuepress注:如需全局安装,请执行npminstall-gvuepress初始化项目在项目文件夹下打开命令行,执行npminit-y创建必要的目录mydocs├───docs......
  • Vuex系列之(九)模块化和命名空间
    模块化+命名空间Vuex中的高级写法:Vuex的模块化编码把不同分类【业务分类不同,比如订单管理类的和商品管理类的】的mutation放在不同位置模块化编码的最终目标:对actions、mutations、state、getters中的内容进行分类整理1.Vuex模块化编码的步骤根据业务分类划分模块,在store......
  • Vue Router系列之(一)路由
    路由1.SPA应用单页Web应用(singlepagewebapplication,SPA)。整个应用只有一个完整的页面(index.html)。点击页面中的导航链接不会刷新页面,页面不会跳转,只会做页面的局部更新。数据需要通过ajax请求获取。注:多页面应用,多个页面来回跳来跳去2.什么是路由?一个路由(route......
  • Vue CLI 系列之(十九)总结
    总结父组件=》子组件【props】子组件=》父组件【函数类型的props、组件自定义事件】孙组件=》父组件【全局事件总线】在组件中引入库时,顺序是这样的第三方库自己写的组件所有开发人员都要用的样式配置在App中当标签中的属性过多时,可进行改写,改写时通常将原生属性放......
  • Vue CLI 系列之(十八)插槽
    插槽结构在哪【结构的代码在哪个组件】,样式就写在哪【样式就写在哪个组件中】这里的App组件是Category组件的父组件<!--Category组件--><h3>{{title}}分类</h3><!--定义一个插槽,相当于提前挖了个坑--><!--slot标签的作用相当于占位符,用于告诉Vue组件标签的标签体内容......