vue3.2中setup語法糖與vue2.0script 區(qū)別

1.起初vue2.0+暴露變量必須return出來结榄,template中才能使用耘柱。

vue3.0+現(xiàn)在只需在script標(biāo)簽中添加setup。

組件只需引入不用注冊袭祟,屬性和方法也不用返回,也不會(huì)寫setup函數(shù)捂贿,也不用export default纠修,甚至是自定義指令也可以在我們的tempate中自動(dòng)獲得。

<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標(biāo)簽扣草,HTML5提供的新標(biāo)簽,更加規(guī)范和語義化 颜屠;可以把列表項(xiàng)放入template標(biāo)簽中辰妙,然后進(jìn)行批量渲染。
2.在HTML頁面中復(fù)制以上代碼甫窟,發(fā)現(xiàn)在瀏覽器并沒有渲染出任何信息密浑,這是因?yàn)閠emplate標(biāo)簽內(nèi)容天生不可見,設(shè)置了display:none粗井;屬性尔破,同樣我們也需要留意一些js操作template標(biāo)簽的具體事項(xiàng):

<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組件自動(dòng)注冊

Vue3.0+無需通過components進(jìn)行注冊

在語法糖中,引入的組件可以直接使用浇衬,無需通過components進(jìn)行注冊懒构,并且無法指定當(dāng)前組件的名稱,他會(huì)自動(dòng)以文件名為主耘擂,也就是不用再寫name屬性

// in <script setup>
//將 SFC 與 一起使用時(shí)<script setup>胆剧,導(dǎo)入的組件會(huì)自動(dòng)在本地注冊:

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

<template>
  <ComponentA />
</template>

// in non-<script setup>
//創(chuàng)建組件的唯一出/入口,創(chuàng)建ComponentA.js文件
import ComponentA from './ComponentA.js'

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

Vue2.0+注冊組件醉冤、聲明組件名稱

components詳解:
組件 (Component) 是 Vue.js 最強(qiáng)大的功能之一秩霍。組件可以擴(kuò)展 HTML 元素,封裝可重用的代碼冤灾。在較高層面上前域,組件是自定義元素,Vue.js 的編譯器為它添加特殊功能韵吨。在有些情況下,組件也可以表現(xiàn)為用 is 特性進(jìn)行了擴(kuò)展的原生 HTML 元素移宅。

提示:所有的 Vue 組件同時(shí)也都是 Vue 的實(shí)例归粉,所以可接受相同的選項(xiàng)對象 (除了一些根級特有的選項(xiàng)) 并提供相同的生命周期鉤子。
// in non-<script setup>
//創(chuàng)建組件的唯一出/入口漏峰,創(chuàng)建ComponentA.js文件
import ComponentA from './ComponentA.js'

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

3.使用setup后新增API

因?yàn)闆]有了setup函數(shù)糠悼,那么props、emit怎么獲取
語法糖提供了新的API供我們使用

vue3.0+中通過defineProps浅乔、defineEmits倔喂、defineExpose

1.defineProps獲取組件傳值 (defineProps接受與props選項(xiàng)相同的值)
image.png
vue2.0中Props 聲明:

Vue 組件需要明確的 props 聲明铝条,以便 Vue 知道傳遞給組件的外部 props 應(yīng)該被視為 fallthrough 屬性

fallthrough:
“fallthrough 屬性”是v-on傳遞給組件的屬性或事件偵聽器,但未在接收組件的props或emits中顯式聲明席噩。這方面的常見示例包括class班缰、style和id屬性。

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

如果不希望組件自動(dòng)繼承屬性悼枢,可以inheritAttrs: false在組件的選項(xiàng)中進(jìn)行設(shè)置埠忘。

<script>
// use normal <script> to declare options
export default {
  inheritAttrs: false
}
</script>
2.defineEmits子組件向父組件時(shí)間傳值(defineEmits接受與選項(xiàng)相同的值emits)
image.png
// in non-<script setup>
//聲明組件發(fā)出的自定義事件。
export default {
  emits: ['check'],
  created() {
    this.$emit('check')
  }
}
vue2.0中 關(guān)于$emit的用法
 //父組件:
 <template>
     <div>
         <div>父組件的toCity{{toCity}}</div>
         <train-city @showCityName="updateCity" :sendData="toCity"></train-city>
     </div>

 //子組件:
 <template>
  <br/><button @click='select(`大連`)'>點(diǎn)擊此處將‘大連’發(fā)射給父組件</button>
 </template>
 <script>
 export default {
     name:'trainCity',
     props:['sendData'], // 用來接收父組件傳給子組件的數(shù)據(jù)
     methods:{
       select(val) {
         let data = {
           cityname: val
         };
         this.$emit('showCityName',data);//select事件觸發(fā)后馒索,自動(dòng)觸發(fā)showCityName事件
       }
     }
   }
 </script>
3.defineExpose暴露自己屬性
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末莹妒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子绰上,更是在濱河造成了極大的恐慌旨怠,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜈块,死亡現(xiàn)場離奇詭異运吓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)疯趟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門拘哨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人信峻,你說我怎么就攤上這事倦青。” “怎么了盹舞?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵产镐,是天一觀的道長。 經(jīng)常有香客問我踢步,道長癣亚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任获印,我火速辦了婚禮述雾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘兼丰。我一直安慰自己玻孟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布鳍征。 她就那樣靜靜地躺著黍翎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪艳丛。 梳的紋絲不亂的頭發(fā)上匣掸,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天趟紊,我揣著相機(jī)與錄音,去河邊找鬼碰酝。 笑死霎匈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的砰粹。 我是一名探鬼主播唧躲,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碱璃!你這毒婦竟也來了弄痹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤嵌器,失蹤者是張志新(化名)和其女友劉穎肛真,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爽航,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚓让,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了讥珍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片历极。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖衷佃,靈堂內(nèi)的尸體忽然破棺而出趟卸,到底是詐尸還是另有隱情,我是刑警寧澤氏义,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布锄列,位于F島的核電站,受9級特大地震影響惯悠,放射性物質(zhì)發(fā)生泄漏邻邮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一克婶、第九天 我趴在偏房一處隱蔽的房頂上張望筒严。 院中可真熱鬧,春花似錦鸠补、人聲如沸萝风。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至睬塌,卻和暖如春泉蝌,著一層夾襖步出監(jiān)牢的瞬間歇万,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工勋陪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贪磺,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓诅愚,卻偏偏與公主長得像寒锚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子违孝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345