vue3.2中setup语法糖与vue2.0script 区别

1.起初vue2.0+暴露变量必须return出来,template中才能使用。

vue3.0+现在只需在script标签中添加setup。

组件只需引入不用注册,属性和方法也不用返回,也不会写setup函数,也不用export default,甚至是自定义指令也可以在我们的tempate中自动获得。

<template>
<my-component:num="num" @click="addNum">
</template>

<script setup>
import {ref} from 'vue';
import MyComponent from'./MyComponent.vue';
//像平常的setup中一样的写,单不需要返回任何变量
conset num =ref(0)
const addNum=()=>{numm.value++}
</script>

vue2.0中template

1.template标签,HTML5提供的新标签,更加规范和语义化 ;可以把列表项放入template标签中,然后进行批量渲染。
2.在HTML页面中复制以上代码,发现在浏览器并没有渲染出任何信息,这是因为template标签内容天生不可见,设置了display:none;属性,同样我们也需要留意一些js操作template标签的具体事项:

<script>
export default{
data() {
  return {
    todos: [
      {
        id: 1,
        text: 'Learn to use v-for'
      },
      {
        id: 2,
        text: 'Learn to use key'
      }
    ]
  }
}
}
<ul>
  <template v-for="todosin item" :key="item.id">
<li>
  {{ item.text }}
</li>
  </template>
</ul>
</script>

2.使用Setup组件自动注册

Vue3.0+无需通过components进行注册

在语法糖中,引入的组件可以直接使用,无需通过components进行注册,并且无法指定当前组件的名称,他会自动以文件名为主,也就是不用再写name属性

// in <script setup>
//将 SFC 与 一起使用时<script setup>,导入的组件会自动在本地注册:

<script setup>
import ComponentA from './ComponentA.vue'
</script>

<template>
  <ComponentA />
</template>

// in non-<script setup>
//创建组件的唯一出/入口,创建ComponentA.js文件
import ComponentA from './ComponentA.js'

export default {
  components: {
    ComponentA
  },
  setup() {
    // ...
  }
}

Vue2.0+注册组件、声明组件名称

components详解:
组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。在有些情况下,组件也可以表现为用 is 特性进行了扩展的原生 HTML 元素。

提示:所有的 Vue 组件同时也都是 Vue 的实例,所以可接受相同的选项对象 (除了一些根级特有的选项) 并提供相同的生命周期钩子。
// in non-<script setup>
//创建组件的唯一出/入口,创建ComponentA.js文件
import ComponentA from './ComponentA.js'

export default {
components: {
ComponentA
},
 setup() {
  // ...
}
 }

3.使用setup后新增API

因为没有了setup函数,那么props、emit怎么获取
语法糖提供了新的API供我们使用

vue3.0+中通过defineProps、defineEmits、defineExpose

1.defineProps获取组件传值 (defineProps接受与props选项相同的值)
image.png
vue2.0中Props 声明:

Vue 组件需要明确的 props 声明,以便 Vue 知道传递给组件的外部 props 应该被视为 fallthrough 属性

fallthrough:
“fallthrough 属性”是v-on传递给组件的属性或事件侦听器,但未在接收组件的props或emits中显式声明。这方面的常见示例包括class、style和id属性。

<script>
// in non-<script setup>
export default {
 props: {
      title: String,
      likes: Number
    }
  }
</script>

如果不希望组件自动继承属性,可以inheritAttrs: false在组件的选项中进行设置。

<script>
// use normal <script> to declare options
export default {
  inheritAttrs: false
}
</script>
2.defineEmits子组件向父组件时间传值(defineEmits接受与选项相同的值emits)
image.png
// in non-<script setup>
//声明组件发出的自定义事件。
export default {
  emits: ['check'],
  created() {
    this.$emit('check')
  }
}
vue2.0中 关于$emit的用法
 //父组件:
 <template>
     <div>
         <div>父组件的toCity{{toCity}}</div>
         <train-city @showCityName="updateCity" :sendData="toCity"></train-city>
     </div>

 //子组件:
 <template>
  <br/><button @click='select(`大连`)'>点击此处将‘大连’发射给父组件</button>
 </template>
 <script>
 export default {
     name:'trainCity',
     props:['sendData'], // 用来接收父组件传给子组件的数据
     methods:{
       select(val) {
         let data = {
           cityname: val
         };
         this.$emit('showCityName',data);//select事件触发后,自动触发showCityName事件
       }
     }
   }
 </script>
3.defineExpose暴露自己属性
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335