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.mzph.cn/news/690860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux网络编程——序列反序列化

文章目录 0. 前言1. 认识协议2. 序列号与反序列化3. 自定义协议——网络计算器4. json 本章Gitee仓库&#xff1a;序列反序列化 0. 前言 tcp是面向字节流的&#xff0c;但是如何保证读取的数据是一个完整的报文呢&#xff1f; 管道也是面向字节流&#xff0c;写端写了一大堆的…

Sora:新一代实时音视频通信框架

一、Sora简介 Sora是一个开源的实时音视频通信框架&#xff0c;旨在提供高效、稳定、可扩展的音视频通信解决方案。它基于WebRTC技术&#xff0c;支持跨平台、跨浏览器的实时音视频通信&#xff0c;并且具备低延迟、高并发、易集成等特点。 --点击进入Sora(一定要科学哦&#x…

机器学习基础(一)理解机器学习的本质

导读&#xff1a;在本文中&#xff0c;将深入探索机器学习的根本原理&#xff0c;包括基本概念、分类及如何通过构建预测模型来应用这些理论。 目录 机器学习 机器学习概念 相关概念 机器学习根本&#xff1a;模型 数据的语言&#xff1a;特征与标签 训练与测试&#xf…

四分位距IQR_ interquartile range

四分位距IQR_ interquartile range 1 IQR&#xff08;Interquartile Range&#xff09;四分位距的含义2 如何计算IQR参考&#xff1a; 1 IQR&#xff08;Interquartile Range&#xff09;四分位距的含义 官方定义&#xff1a; 四分位距&#xff08;interquartile range, IQR&a…

机器学习中梯度下降法的缺点

机器学习中的梯度下降法是一种寻找函数最小值的优化算法&#xff0c;广泛应用于训练各种模型&#xff0c;尤其是在深度学习中。尽管其应用广泛&#xff0c;但梯度下降法也存在一些不可忽视的缺点&#xff1a; 1. 局部最小值和鞍点 局部最小值问题&#xff1a; 对于非凸函数&a…

数据分析 - 机器学习

1&#xff1a;线性回归 线性回归是一种统计技术用于对输出变量与一个或多个输入变量之间的关系进行建模 用外行人的话来说&#xff0c;将其视为通过某些数据点拟合一条线&#xff0c;如下所示 以便在未知数据上进行预测&#xff0c;假设变量之间存在线性关系 点和线之间存在微小…

[ansible] playbook运用

一、复习playbook剧本 --- - name: first play for install nginx #设置play的名称gather_facts: false #设置不收集facts信息hosts: webservers:dbservers #指定执行此play的远程主机组remote_user: root #指定执行此play的用…

python绘制k线图均线图

AAPL.csv 数据文件 Date,Close,Volume,Open,High,Low 06/23/2023,$186.68,53117000,$185.55,$187.56,$185.01 06/22/2023,$187.00,51245330,$183.74,$187.045,$183.67 06/21/2023,$183.96,49515700,$184.90,$185.41,$182.5901 06/20/2023,$185.01,49799090,$184.41,$1…

15-55V输入自动升降压 光伏MPPT自动跟踪充电方案 大功率300瓦

1.MPPT原理--简介 MPPT&#xff0c;全称为Maximum Power Point Tracking&#xff0c;即最大功点跟踪&#xff0c;它是一种通过调节电气模块的工作状态&#xff0c;使光伏板能够输出更多电能的电气系统能够将太阳能电池板发出的直流电有效地贮存在蓄电池中&#xff0c;可有效地…

【蓝桥杯】算法模板题(Floyd算法)

一.弗洛伊德算法 用途&#xff1a;用来求解多源点最短路径问题。 思想&#xff1a;Floyd算法又称为插点法&#xff0c;是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法。 主要步骤&#xff1a; 1&#xff09;初始化&#xff1a;使用邻接矩阵初始化dis…

GitHub仓库文件部署

目录 软件下载和安装 git创建仓库 Github仓库配置 git管理软件配置 Git管理 软件下载和安装 首先需要下载git&#xff0c;以及git管理软件&#xff0c;对其进行安装。 git创建仓库 首先需要创建仓库&#xff0c;在本地仓库文件夹cmd之后输入以下指令创建git仓库文件。 …

小米空气净化器2s使用体验

这个产品最早上市是2017年&#xff0c;我买回来实际上只用了1年就弃用了&#xff0c;性能不行&#xff0c;使用体验也不好。 打算买新的空气净化器&#xff0c;抽空吐槽一下。 这个净化器发售价是899&#xff0c;在当时来说算中下水平的&#xff0c;小米的&#xff0c;有米家…

Spring Boot与LiteFlow:轻量级流程引擎的集成与应用含完整过程

点击下载《Spring Boot与LiteFlow&#xff1a;轻量级流程引擎的集成与应用含完整过程》添加链接描述 1. 前言 本文旨在介绍Spring Boot与LiteFlow的集成方法&#xff0c;详细阐述LiteFlow的原理、使用流程、步骤以及代码注释。通过本文&#xff0c;读者将能够了解LiteFlow的特…

数据分析师SQL面试准备(part1)

1. SQL 万能框架 2. SQL的书写顺序&#xff0c;跟程序真的执行顺序不同 3. 4. 5. 6. 7. case when utilization 8. 9. 10. 11.

OpenHarmony—UIAbility组件间交互(设备内)

UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时&#xff0c;会涉及到启动特定的UIAbility&#xff0c;该UIAbility可以是应用内的其他UIAbility&#xff0c;也可以是其他应用的UIAbility&#xff08;例如启动三方支付UIAbility&#xff09;。 本章节将从如下场…

多维时序 | Matlab实现LSTM-Mutilhead-Attention长短期记忆神经网络融合多头注意力机制多变量时间序列预测模型

多维时序 | Matlab实现LSTM-Mutilhead-Attention长短期记忆神经网络融合多头注意力机制多变量时间序列预测模型 目录 多维时序 | Matlab实现LSTM-Mutilhead-Attention长短期记忆神经网络融合多头注意力机制多变量时间序列预测模型预测效果基本介绍程序设计参考资料 预测效果 基…

化学空间可视化(chemical space visualization)开源软件ChemPlot的安装及使用

文章目录 前言一、ChemPlot是什么&#xff1f;二、conda环境安装ChemPlot1. 创建conda环境2. 安装chemplot及需要的包3. 检验安装 三、使用步骤1. 化合物数据库可视化使用方法BBBP数据库的t-SNE降维后可视化&#xff1a;BBBP数据库的PCA降维后可视化&#xff1a;BBBP数据库的UM…

shapely 笔记:基本方法

1 线性方法 1.1 object.interpolate(distance[, normalizedFalse]) print(LineString([(0, 0), (0, 1), (1, 1)]).interpolate(1.5)) #POINT (0.5 1)print(LineString([(0, 0), (0, 1), (1, 1)]).interpolate(0.75, normalizedTrue)) #POINT (0.5 1) LineString([(0, 0), (0…

JimuReport积木报表 v1.7.0 变革版本发布,低代码报表设计工具

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…

从零开始的 dbt 入门教程 (dbt core 开发进阶篇)

引 在上一篇文章中&#xff0c;我们花了专门的篇幅介绍了 dbt 更多实用的命令&#xff0c;那么我们继续按照之前的约定来聊 dbt 中你可能会遇到的疑惑以及有用的概念&#xff0c;如果你是 dbt 初学者&#xff0c;我相信如下知识点一定会对你有极大的帮助&#xff1a; 了解 dbt_…