Vue | (四)使用Vue腳手架(上) | 尚硅谷Vue2.0+Vue3.0全套教程

文章目錄

  • 📚初始化腳手架
    • 🐇創建初體驗
    • 🐇分析腳手架結構
    • 🐇關于render
    • 🐇查看默認配置
  • 📚ref與props
    • 🐇ref屬性
    • 🐇props配置項
  • 📚混入
  • 📚插件
  • 📚scoped樣式

學習鏈接:尚硅谷Vue2.0+Vue3.0全套教程丨vuejs從入門到精通,本文對應p61-p69,博客參考尚硅谷公開筆記,補充記錄實操。

📚初始化腳手架

🐇創建初體驗

  • Vue 腳手架是 Vue 官方提供的標準化開發工具(開發平臺)。
  • CLI:command line interface(目前已經維護了,但也試一試)

  • 全局安裝
    • npm config set registry https://registry.npm.taobao.org
    • npm install -g @vue/cli
      在這里插入圖片描述
      在這里插入圖片描述
  • 創建過程
    • 切換到要創建項目的目錄,然后使用vue create xxxx命令創建項目。
    • 啟動項目:npm run serve
    • 停止項目:ctrl + C
      在這里插入圖片描述
      在這里插入圖片描述
      在這里插入圖片描述在這里插入圖片描述
      在這里插入圖片描述
      在這里插入圖片描述
      在這里插入圖片描述

🐇分析腳手架結構

  • 詳見講解,實操見真知
    在這里插入圖片描述
    在這里插入圖片描述
  • 填坑,把上一節沒跑出來的代碼跑一下
    在這里插入圖片描述
  • ??把對應的地址鏈接調整后,運行后出現如下報錯:
    在這里插入圖片描述
    • ①將School和Student對應命名改為復合命名。
    • ②package.json文件中的eslintConfig ,找到rules處,添加以下代碼即可解決
      "rules":{"no-mixed-spaces-and-tabs":0
      }
      
  • 運行結果
    在這里插入圖片描述
    在這里插入圖片描述

🐇關于render

  • 與上一節最后一個小案例不同的是,Vue默認創建的main.js如下,且我在上述案例應用時直接應用了默認生成的main.js
    import Vue from 'vue'
    import App from './App.vue'Vue.config.productionTip = falsenew Vue({render: h => h(App),
    }).$mount('#app')
    
  • render函數的本質就是創建元素,也就是說本質是類似于以下的函數:
    render(createElement){return createElement('h1','你好啊')
    }
    //精簡后就是:
    render: h => h('h1','你好啊')
    //也就是上邊的render: h => h(App)
    
  • 按原來的版本運行了一下,會報錯。解決辦法是,修改import Vue from 'vue'import Vue from 'vue/dist/vue'。原來引入的vue其實是殘缺版的vue(缺少了模板解析器),它無法解析template,標簽類型的template不受影響,也即.vue文件里的<template></template>不受影響。
    // 原來的寫法
    new Vue({el:'#app',template:`<App></App>`,components:{App},
    })
    
    在這里插入圖片描述
  • 為什么要用殘缺版vue——更精簡。
    在這里插入圖片描述
  • 關于不同版本的Vue
    • vue.jsvue.runtime.xxx.js的區別:
      • vue.js是完整版的Vue,包含核心功能 + 模板解析器
      • vue.runtime.xxx.js是運行版的Vue,只包含核心功能,沒有模板解析器。
    • 因為vue.runtime.xxx.js沒有模板解析器,所以不能使用template配置項。需要使用render函數接收到的createElement函數去指定具體內容。

🐇查看默認配置

  • Vue腳手架隱藏了所有webpack相關的配置。
  • 若想查看具體的webpack配置,要執行vue inspect > output.js,會生成output.jsvue.config.js(這里和教程不一樣,現在后者也會直接生成)。
  • 使用vue.config.js可以對腳手架進行個性化定制,詳情見官網配置參考(不過一般誰改哇[?_??])。
    在這里插入圖片描述

📚ref與props

后續代碼都在上述框架里修改,文內不一定展示完整代碼。

🐇ref屬性

  1. 被用來給元素或子組件注冊引用信息(id的替代者)

  2. 應用在html標簽上獲取的是真實DOM元素,應用在組件標簽上是組件實例對象(vc)

  3. 使用方式:

    1. 打標識:<h1 ref="xxx">.....</h1><School ref="xxx"></School>
    2. 獲取:this.$refs.xxx
    <template><div><h1 v-text="msg" ref="title"></h1><button ref="btn" @click="showDOM">點我輸出上方的DOM元素</button><School ref="sch"/></div>
    </template><script>//引入School組件import School from './components/School-Test'export default {name:'App',components:{School},data() {return {msg:'歡迎學習Vue!'}},methods: {showDOM(){console.log(this.$refs.title) //真實DOM元素console.log(this.$refs.btn) //真實DOM元素console.log(this.$refs.sch) //School組件的實例對象(vc)}},}
    </script>
    

    在這里插入圖片描述在這里插入圖片描述

🐇props配置項

  1. 功能:讓組件接收外部傳過來的數據

  2. 傳遞數據:<Demo name="xxx"/>

  3. 接收數據:

    1. 第一種方式(只接收):props:['name']

    2. 第二種方式(限制類型):props:{name:String}

    3. 第三種方式(限制類型、限制必要性、指定默認值):

      props:{name:{type:String, //類型required:true, //必要性default:'老王' //默認值}
      }
      

    備注:props是只讀的,Vue底層會監測你對props的修改,如果進行了修改,就會發出警告,若業務需求確實需要修改,那么請復制props的內容到data中一份,然后去修改data中的數據。

  • 傳的時候:<Student name="youyi" sex="女" :age="20"/>(App.vue)

    <template><div><Student name="youyi" sex="" :age="20"/></div>
    </template><script>import Student from './components/Student-Test'export default {name:'App',components:{Student}}
    </script>
    
  • 接收的時候:props,必須要寫類似于微信轉賬確認(Student-Test.vue)

    <template><div><h1>{{msg}}</h1><h2>學生姓名:{{name}}</h2><h2>學生性別:{{sex}}</h2><h2>學生年齡:{{myAge+1}}</h2><button @click="updateAge">嘗試修改收到的年齡</button></div>
    </template><script>export default {name:'Student-Test',data() {console.log(this)return {msg:'我是一個尚硅谷的學生',//props優先級更高,先接收//和后續update以及上述+1對應,可以規避vue報錯和錯亂myAge:this.age}},methods: {updateAge(){this.myAge++}},//簡單聲明接收(傳過來了你要確認接收)// props:['name','age','sex'] //接收的同時對數據進行類型限制(不該收的不收)/* props:{name:String,age:Number,sex:String} *///接收的同時對數據:進行類型限制+默認值的指定+必要性的限制props:{name:{type:String, //name的類型是字符串required:true, //name是必要的},age:{type:Number,default:99 //默認值},sex:{type:String,required:true}}}
    </script>
    

    在這里插入圖片描述

📚混入

  1. 功能:可以把多個組件共用的配置提取成一個混入對象(提取公因數)。

  2. 使用方式

    • 第一步定義混合

      {data(){....},methods:{....}....
      }
      
    • 第二步使用混入

      • 全局混入:Vue.mixin(xxx)
      • 局部混入:mixins:['xxx']

  • Student-Test.vue

    <template><div><h2 @click="showName">學生姓名:{{name}}</h2><h2>學生性別:{{sex}}</h2></div>
    </template><script>// 局部// import {hunhe,hunhe2} from '../mixin'export default {name:'Student-Test',data() {return {name:'右一',sex:'女'}},mounted() {// 混合的mounted優先,原有的mounted在后console.log('你好啊!!Student(ver)')},// mixins:[hunhe,hunhe2]}
    </script>
    
  • School-Test.vue

    <template><div><h2 @click="showName">學校名稱:{{name}}</h2><h2>學校地址:{{address}}</h2></div>
    </template><script>//引入一個hunhe// import {hunhe,hunhe2} from '../mixin'export default {name:'School-Test',data() {return {name:'尚硅谷',address:'北京',x:666}},mounted() {console.log('你好啊!!School(ver)')},// mixins:[hunhe,hunhe2],}
    </script>
    
  • App.vue

    <template><div><School/><hr><Student/></div>
    </template><script>import School from './components/School-Test'import Student from './components/Student-Test'export default {name:'App',components:{School,Student}}
    </script>
    
  • mixin.js

    export const hunhe = {methods: {showName(){alert(this.name)}},mounted() {// 混合的mounted是全局性的,什么都要摻和一下// 混合的mounted優先,原有的mounted在后console.log('你好啊!')},
    }
    export const hunhe2 = {data() {return {//數據混合作為一個補充,不干擾原有數據x:100,y:200}},
    }
    
  • main.js

    //引入Vue
    import Vue from 'vue'
    //引入App
    import App from './App.vue'
    import {hunhe,hunhe2} from './mixin'
    //關閉Vue的生產提示
    Vue.config.productionTip = falseVue.mixin(hunhe)
    Vue.mixin(hunhe2)//創建vm
    new Vue({el:'#app',render: h => h(App)
    })
    

在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述

📚插件

  1. 功能:用于增強Vue。

  2. 本質:包含install方法的一個對象,install的第一個參數是Vue,第二個以后的參數是插件使用者傳遞的數據。

  3. 定義插件

    對象.install = function (Vue, options) {// 1. 添加全局過濾器Vue.filter(....)// 2. 添加全局指令Vue.directive(....)// 3. 配置全局混入(合)Vue.mixin(....)// 4. 添加實例方法Vue.prototype.$myMethod = function () {...}Vue.prototype.$myProperty = xxxx
    }
    
  4. 使用插件Vue.use()


  • plugins.js
    export default {install(Vue,x,y,z){console.log(x,y,z)//全局過濾器Vue.filter('mySlice',function(value){return value.slice(0,4)})//定義全局指令Vue.directive('fbind',{//指令與元素成功綁定時(一上來)bind(element,binding){element.value = binding.value},//指令所在元素被插入頁面時inserted(element,binding){// eslint-disable-line no-unused-varselement.focus()},//指令所在的模板被重新解析時update(element,binding){element.value = binding.value}})//定義混入Vue.mixin({data() {return {x:100,y:200}},})//給Vue原型上添加一個方法(vm和vc就都能用了)Vue.prototype.hello = ()=>{alert('你好啊')}}
    }
    
  • Student.Test.vue
    <template><div><h2>學生姓名:{{name}}</h2><h2>學生性別:{{sex}}</h2><input type="text" v-fbind:value="name"></div>
    </template><script>export default {name:'Student-Test',data() {return {name:'lala',sex:'女'}},}
    </script>
    
  • School-Test.vue
    <template><div><h2>學校名稱:{{name | mySlice}}</h2><h2>學校地址:{{address}}</h2><button @click="test">點我測試一個hello方法</button></div>
    </template><script>export default {name:'School-Test',data() {return {name:'尚硅谷12345',address:'北京',}},methods: {test(){this.hello()}},}
    </script>
    
  • App.vue 同上。
  • main.js
    //引入Vue
    import Vue from 'vue'
    //引入App
    import App from './App.vue'
    //引入插件
    import plugins from './plugins'
    //關閉Vue的生產提示
    Vue.config.productionTip = false//應用(使用)插件
    Vue.use(plugins,1,2,3)
    //創建vm
    new Vue({el:'#app',render: h => h(App)
    })
    

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

📚scoped樣式

  1. 作用:讓樣式在局部生效,防止沖突。
  2. 寫法<style scoped>

  • School.Test.vue
    <template><div class="demo"><h2 class="title">學校名稱:{{name}}</h2><h2>學校地址:{{address}}</h2></div>
    </template><script>export default {name:'School-Test',data() {return {name:'尚硅谷atguigu',address:'北京',}}}
    </script><style scoped>.demo{background-color: skyblue;}
    </style>
    
  • Student.Test.vue
    <template><div class="demo"><h2 class="title">學生姓名:{{name}}</h2><h2 class="sex">學生性別:{{sex}}</h2></div>
    </template><script>export default {name:'Student-Test',data() {return {name:'lala',sex:'女'}}}
    </script><style lang="less" scoped>.demo{background-color: pink;.sex{font-size: 40px;}}
    </style>
    
  • App.vue
    <template><div><h1 class="title">你好啊</h1><School/><Student/></div>
    </template><script>import Student from './components/Student-Test'import School from './components/School-Test'export default {name:'App',components:{School,Student}}
    </script><style scoped>.title{color: red;}
    </style>
    

在這里插入圖片描述

  • ps:腳手架不支持less,需要額外安裝npm install less-loader,安裝好之后run即可(和視頻不同,現在已經兼容了)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697882.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697882.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697882.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

idea配置javafx

一、下載sdk 在jdk8之后,需要下載sdk包 ??javafx-sdk-18.zip 這里適用的jkd版本如圖 二、配置 創建一個項目之后,進行如下配置,將sdk導入到項目中 配置啟動參數 可以使用-號將之前的去掉&

同步 BUCK 與 異步 BUCK 的區別

上篇文章介紹 BUCK 基本拓撲電路工作原理&#xff0c;BUCK 電路如下圖&#xff1a; 因為二極管的存在&#xff0c;只需要控制一個 MOS 管開關&#xff0c;一般將該電路稱為異步 BUCK 電路&#xff0c;如果把這個二極管換為 MOS 管&#xff0c;如下圖&#xff1a; 該電路用到了兩…

vue Threejs實現任意畫線(鼠標點擊畫線)

Threejs實現任意畫線(鼠標點擊畫線) 鼠標左鍵單擊添加點鼠標右鍵回退到上一個點,并繼續畫按住shift可以畫平行于x軸或平行于z軸的線按Esc完成畫線

【leetcode題解C++】121.買賣股票的最佳時機 and 122.買賣股票的最佳時機II and 55.跳躍游戲 and 45.跳躍游戲II

121. 買賣股票的最佳時機 給定一個數組 prices &#xff0c;它的第 i 個元素 prices[i] 表示一支給定股票第 i 天的價格。 你只能選擇 某一天 買入這只股票&#xff0c;并選擇在 未來的某一個不同的日子 賣出該股票。設計一個算法來計算你所能獲取的最大利潤。 返回你可以從…

汽車信息安全概述

隨著智能網聯汽車的迅猛發展&#xff0c;車輛不再是簡單的交通工具&#xff0c;而是集數據收集、處理與通信于一體的移動智能終端。然而&#xff0c;這一變革也使得汽車成為黑客攻擊的新目標。汽車信息安全問題日益凸顯&#xff0c;成為行業關注的焦點。本文將深入探討汽車信息…

前后端分離vscode保險業務管理系統vue+Nodejs

本設計主要應用于完成對保險業務進行計算機化的管理。系統前臺展示各種種類的保險&#xff0c;顧客可以選擇登陸后買入。公司員工為管理員&#xff0c;由公司統一分配賬號&#xff0c;員工用工號密碼登陸。可以修改密碼&#xff0c;查看、修改自己的信息。員工可處理顧客信息。…

企微hook框架

https://wwm.lanzoum.com/ipUTp1ot1twh 密碼:hvev 免費的企微框架 支持文本消息&#xff0c;圖片消息&#xff0c;視頻消息&#xff0c;文件消息。 其他可自行下載測試。 有興趣可以進群交流。720192224 BOOL WxWorkSendData(string data) { WX_GETOBJDATA ob…

1.CSS單位總結

CSS 單位總結 經典真題 px 和 em 的區別 CSS 中的哪些單位 首先&#xff0c;在 CSS 中&#xff0c;單位分為兩大類&#xff0c;絕對長度單位和相對長度單位。 絕對長度單位 我們先來說這個&#xff0c;絕對長度單位最好理解&#xff0c;和我們現實生活中是一樣的。在我們…

Windows sever Event 70117000事件日志

背景&#xff1a;Windows server2008 頻繁藍屏&#xff0c;日志報錯信息時間ID&#xff1a;7011&7000&#xff0c;Service Control Manager 原因&#xff1a;Service Control Manager transmits control requests to running services and driver services. It also maint…

mysql-MVCC

一、基礎概念 1. MVCC的含義 MVCC (Multiversion Concurrency Control)&#xff0c;即多版本并發控制技術&#xff0c;它是通過讀取某個時間點的快照數據&#xff0c; 來降低并發事務沖突而引起的鎖等待&#xff0c; 從而提高并發性能的一種機制. MVCC 的實現,是通過保存數據…

汽車常識網:電腦主機如何算功率的計算方法?

今天汽車知識網就給大家講解一下如何計算一臺主機的功率。 它還會解釋如何計算計算機主機所需的功率&#xff1f; &#xff1f; &#xff08;如何計算電腦主機所需的功率&#xff09;進行說明。 如果它恰好解決了您現在面臨的問題&#xff0c;請不要忘記關注本站。 讓我們現在就…

勒索組織再次盯緊制造業!亞信安全發布《勒索家族和勒索事件監控報告》

本周態勢快速感知 本周全球共監測到勒索事件104起&#xff0c;事件數量有所下降。 lockbit3.0仍然是影響最嚴重的勒索家族&#xff1b;hunters和play也是兩個活動頻繁的惡意家族&#xff0c;需要注意防范。 本周8base勒索組織竊取安索杰國際貿易公司大量文件&#xff0c;包括…

谷歌掀桌子!開源Gemma:可商用,性能超過Llama 2!

2月22日&#xff0c;谷歌在官網宣布&#xff0c;開源大語言模型Gemma。 Gemma與谷歌最新發布的Gemini 使用了同一架構&#xff0c;有20億、70億兩種參數&#xff0c;每種參數都有預訓練和指令調優兩個版本。 根據谷歌公布的測試顯示&#xff0c;在MMLU、BBH、GSM8K等主流測試…

解密C語言選擇結構:掌握條件語句與分支邏輯的利器

引言 C語?是結構化的程序設計語?&#xff0c;這?的結構指的是順序結構、選擇結構、循環結構。為什么有著三種結構呢&#xff0c;大家其實可以想象一下&#xff0c;生活中的絕大數事情都可以抽象著三種結構&#xff0c;而我們今天要給大家介紹的就是三大結構之一——選擇結構…

Jenkins 中部署Nodejs插件并使用,并構建前端項目(3)

遇到多個版本nodeJS需要構建的時候 1、第一種就是一個配置安裝&#xff0c;然后進行選中配置 2、第二種就是插件&#xff1a;nvm-wrapper&#xff0c;我們還是選用NodeJS插件&#xff1a; &#xff08;1&#xff09;可以加載任意npmrc文件&#xff1b; &#xff08;2&#x…

鴻蒙NEXT出現有前途嗎?是否會和安卓、IOS開發歷程一樣?

只要有手機操作系統這玩意存在&#xff0c;一定是需要原生開發人員的&#xff0c;但隨著獨立操作系統越來越多的話&#xff0c;混合App開發可能是個“萬能解決方案”。 2024年&#xff0c;在中國&#xff0c;被各大媒體和開發者稱為“鴻蒙元年”。 在2023年底就有業內人士透露…

【es6】Map 和 Object 對象的區別

對象 Object Object 是一個特殊的對象&#xff0c;它本身是一個頂級對象&#xff0c;同時還是一個構造函數&#xff0c;還可以使用字面量的方式聲明一個對象本質上是鍵值對的集合&#xff0c;但是健只能是字符串 或 Symbol使用 . [] 去獲取object 的屬性&#xff0c;不存在則…

jenkins編譯使用nohup部署進程到后臺失敗,解決方法

在shell腳本中加入BUILD_IDdontKillMe server為二進制文件 #!/bin/bashBUILD_IDdontKillMenohup ./server & 原理&#xff1a;jenkins默認會在構建完成后殺掉構建過程中shell命令觸發的衍生進程。jenkins根據BUILD_ID識別某個進程是否為構建過程的衍生進程&#xff0c;故…

常見鎖策略,CAS,synchrodized原理講解

&#x1f3a5; 個人主頁&#xff1a;Dikz12&#x1f4d5;格言&#xff1a;那些在暗處執拗生長的花&#xff0c;終有一日會馥郁傳香歡迎大家&#x1f44d;點贊?評論?收藏 目錄 常見鎖策略 樂觀鎖和悲觀鎖 輕量級鎖和重量級鎖 自旋鎖和掛起等待鎖 讀寫鎖 公平鎖和非公平鎖…

基于Java+SpringBoot+Vue.js前后端分離玩具購物商城系統設計和實現 可行性分析

博主介紹&#xff1a;黃菊華老師《Vue.js入門與商城開發實戰》《微信小程序商城開發》圖書作者&#xff0c;CSDN博客專家&#xff0c;在線教育專家&#xff0c;CSDN鉆石講師&#xff1b;專注大學生畢業設計教育和輔導。 所有項目都配有從入門到精通的基礎知識視頻課程&#xff…