Vue(四)——使用脚手架(1)

news/2024/4/29 22:57:47/文章来源:https://blog.csdn.net/m0_52601969/article/details/127760454

安装和启动:

目录

分析脚手架结构

render函数

修改默认配置

ref属性

props配置项

mixin混入 

插件

scoped样式


分析脚手架结构

脚手架文件结构

	├── node_modules ├── public│   ├── favicon.ico: 页签图标│   └── index.html: 主页面├── src│   ├── assets: 存放静态资源│   │   └── logo.png│   │── component: 存放组件│   │   └── HelloWorld.vue│   │── App.vue: 汇总所有组件│   │── main.js: 入口文件├── .gitignore: git版本管制忽略的配置├── babel.config.js: babel的配置文件├── package.json: 应用包配置文件 ├── README.md: 应用描述文件├── package-lock.json:包版本控制文件

main.js:该文件是整个项目的入口文件

App.vue:

index.html:

render函数

传统情况下js写法:

运行之后:(引入了一个残缺的Vue,没有模板解析器)

实际上在引入的时候,引入的是vue.runtime.esm.js(残缺的vue)

关于不同版本的Vue:

        1.vue.js与vue.runtime.xxx.js的区别:

                (1).vue.js是完整版的Vue,包含:核心功能+模板解析器。

                (2).vue.runtime.xxx.js是运行版的Vue,只包含:核心功能;没有模板解析器。

        2.因为vue.runtime.xxx.js没有模板解析器,所以不能使用template配置项,需要使用

            render函数接收到的createElement函数(这个函数可以改名)去指定具体内容。

两种解决方法:

1.使用render函数

2.引入带模板解析器的Vue    

        当引入残缺版的vue,还想配置具体的内容,就得使用render函数,当然上图写法可以使用箭头函数精简。

        此时这里传入两个参数,是因为h1是html里面的内置元素,这个元素里面得写具体的内容,所以得穿第二个参数,但是如果说用的是组件,此时就不需要再写具体的内容,因为内容都在APP这个组件里面(不过在此之前需要import引入app组件)。

多说一句,render函数只需要在main.js中引入一次即可。

修改默认配置

vue的默认配置文件隐藏了起来,在命令行使用 vue inspect > output.js 命令打包出来。

注意这种方式只是给你输出出来,让你看一下,并不是修改之后脚手架就变了。

默认配置下哪些东西不能改?

这些东西可以改    配置参考 | Vue CLI (vuejs.org)

在与 package.json同级目录下新建vue.config.js文件,对脚手架进行个性化定制。

不能预留空位,因为配置会将自定义的部分整合到默认配置文件中,要么就写好,要么就不写。

module.exports = {pages: {index: {// 入口entry: 'src/index/main.js'}},// 关闭语法检查lineOnSave:false
}

ref属性

目录结构:

获取this的vc实例对象

顺着vc触发可以找到dom元素

正式获取

给School组件标签加ref,则获得School组件的vc实例对象

main.js

//引入Vue
import Vue from 'vue'
//引入App
import App from './App.vue'
//关闭Vue的生产提示
Vue.config.productionTip = false//创建vm
new Vue({el:'#app',render: h => h(App)
})

./components/School.vue

<template><div class="school"><h2>学校名称:{{name}}</h2><h2>学校地址:{{address}}</h2></div>
</template><script>export default {name:'School',data() {return {name:'尚硅谷',address:'北京·昌平'}},}
</script><style>.school{background-color: gray;}
</style>

App.vue

<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'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>

ref属性

1. 被用来给元素或子组件(eg:App里的School)注册引用信息(id的替代者)

2. 应用在html标签上获取的是真实DOM元素,应用在组件标签上是组件实例对象(vc)

3. 使用方式:

    1. 打标识:```<h1 ref="xxx">.....</h1>``` 或 ```<School ref="xxx"></School>```

    2. 获取:```this.$refs.xxx```

props配置项

目录结构:

定义一个Student.vue,并在App.vue中三次引用。

        现在有这么一个需求,已经定义好了一个组件,老王要用和这个一模一样的组件,但是数据不一样,该如何是好?(总不能复制一份)

        在App.vue中使用Student标签中设置属性及其属性值。 

        设置值在另一头也要接收,此时就需要在Student.vue当中使用props,三种方式:

  • 简单声明接收
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}}

./components/Student.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',data() {console.log(this)return {msg:'我是一个尚硅谷的学生',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>

 App.vue

<template><div><Student name="李四" sex="女" :age="18"/></div>
</template><script>import Student from './components/Student'export default {name:'App',components:{Student}}
</script>

main.js

//引入Vue
import Vue from 'vue'
//引入App
import App from './App.vue'
//关闭Vue的生产提示
Vue.config.productionTip = false//创建vm
new Vue({el:'#app',render: h => h(App)
})

props配置项

1. 功能:让组件接收外部传过来的数据

2. 传递数据:```<Demo name="xxx"/>```

3. 接收数据:

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

    2. 第二种方式(限制类型):```props:{name:String}```

    3. 第三种方式(限制类型、限制必要性、指定默认值):

        ```js

        props:{

         name:{

         type:String, //类型

         required:true, //必要性

         default:'老王' //默认值

         }

        }

        ```

    > 备注:props是只读的,Vue底层会监测你对props的修改,如果进行了修改,就会发出警告。

        若业务需求确实需要修改,那么请复制props的内容到data中一份,然后去修改data中的数据。

mixin混入 

目录结构:

提一个需求,点击按钮弹窗name值:

 可以发现红色框里内容是一样的,此时可以将他们都砍掉,使用mixin。

新建一个mixin.js,将共用的配置(例如showName方法)提取成混入对象,并暴露出去

在School.vue和Student.vue中引入并应用,两种方式:全局引入和局部引入

局部引入:

全局引入:(所有的vc和vm都会应用混合的东西)

 ./components/School.vue

<template><div><h2 @click="showName">学校名称:{{name}}</h2><h2>学校地址:{{address}}</h2></div>
</template><script>//引入一个hunhe// import {hunhe,hunhe2} from '../mixin'export default {name:'School',data() {return {name:'尚硅谷',address:'北京',x:666}},// mixins:[hunhe,hunhe2],}
</script>

  ./components/Student.vue

<template><div><h2 @click="showName">学生姓名:{{name}}</h2><h2>学生性别:{{sex}}</h2></div>
</template><script>// import {hunhe,hunhe2} from '../mixin'export default {name:'Student',data() {return {name:'张三',sex:'男'}},// mixins:[hunhe,hunhe2]}
</script>

 App.vue

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

 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)
})

 mixin.js

export const hunhe = {methods: {showName(){alert(this.name)}},mounted() {console.log('你好啊!')},
}
export const hunhe2 = {data() {return {x:100,y:200}},
}

mixin(混入)

1. 功能:可以把多个组件共用的配置提取成一个混入对象

2. 使用方式:

    第一步定义混合:

    ```

    {

        data(){....},

        methods:{....}

        ....

    }

    ```

    第二步使用混入:

    ​ 全局混入:```Vue.mixin(xxx)```

    ​ 局部混入:```mixins:['xxx']  ```

ps:如果***.vue中当中没有混合中的数据则自动混合其中的数据,如果有数据和混合中重复则以***.vue为准。但如果在混合里面加入生命周期钩子函数,则不以任何人为准,都表达出来,且混合在前。

插件

目录结构:

 新建plugins.js,编写install方法并暴露

先应用插件再创建vm

传入参数为Vue构造函数:

a是vm的缔造者,vue的构造函数

有了这个就能做很多事情了

./components/School.vue

<template><div><h2>学校名称:{{name | mySlice}}</h2><h2>学校地址:{{address}}</h2><button @click="test">点我测试一个hello方法</button></div>
</template><script>export default {name:'School',data() {return {name:'尚硅谷atguigu',address:'北京',}},methods: {test(){this.hello()}},}
</script>

./components/Student.vue

<template><div><h2>学生姓名:{{name}}</h2><h2>学生性别:{{sex}}</h2><input type="text" v-fbind:value="name"></div>
</template><script>export default {name:'Student',data() {return {name:'张三',sex:'男'}},}
</script>

App.vue

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

 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){element.focus()},//指令所在的模板被重新解析时update(element,binding){element.value = binding.value}})//定义混入Vue.mixin({data() {return {x:100,y:200}},})//给Vue原型上添加一个方法(vm和vc就都能用了)Vue.prototype.hello = ()=>{alert('你好啊')}}
}

 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)
})

插件

1. 功能:用于增强Vue(游戏外挂)

2. 本质:包含install方法的一个对象,install的第一个参数是Vue,第二个以后的参数是插件使用者传递的数据。

3. 定义插件:

    ```js

    对象.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()``` 

scoped样式

目录结构:

引入一个问题

给Student和School分别设置样式,恰巧class名相同,都为demo,但是样式颜色不一样

结果和student一样(student背景色设置的为橙色)

为啥?因为在App.vue当中,student是后引入的,它覆盖了前一个。

给style标签添加scoped(作用域)属性,则表示style标签只作用于他当前的template里面。

其实他是给当前这歌div添加了一个特殊的标签属性,且每次都是随机不一样的。

完整代码:

 

效果:

scoped样式

1. 作用:让样式在局部生效,防止冲突。

2. 写法:```<style scoped>```

scoped样式一般不会在App.vue中使用 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_223837.aspx

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

相关文章

【Linux修炼手册:基本指令(上)】

目录 1 ls 指令 2 pwd命令 3 cd 指令 4 touch指令 5 mkdir指令&#xff08;重要&#xff09; 6 rmdir指令 && rm 指令&#xff08;重要&#xff09; 7 cp指令&#xff08;重要&#xff09; 8 mv指令&#xff08;重要&#xff09; 9 cat 总结&#xff1a; 1 ls…

C语言如何做到四舍五入保留小数

C语言中的格式化打印 : 例如&#xff1a; printf("%.2f",21.195); 输出是 21.20 四舍五入保留了定义宏变量 #define 即符号常量 也能够四舍五入保留 而变量和常变量 并不四舍五入&#xff1a; float a21.195 ;const float b21.195;printf("%.2f \n %.2f&quo…

Java本地搭建宝塔部署实战springboot工艺管理系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套java开发的工艺管理系统源码&#xff0c;该系统是前后端分离的架构&#xff0c;前端使用Vue2&#xff0c;后端使用SpringBoot2。 技术架构 技术框架&#xff1a;SpringBoot2.0.0 Mybatis1.3.…

【linux】stat文件属性中三个时间的区别(Access time,Modify time,Change time)

在了解这三个时间之前&#xff0c;我们了解什么是stat。 stat 文件名/目录 表示查看这个文件或者目录的属性&#xff0c;当然属性中包括我们的三个时间属性。 例如&#xff1a; OK&#xff0c;了解完stat之后 ,我们开始进入主题&#xff1a;Access time,Modify time,Change t…

几款很好看的爱心表白代码(动态)

分享几款好看的爱心表白代码❤️爱心代码❤️&#xff08;C语言&#xff09;❤️流动爱心❤️&#xff08;htmlcssjs&#xff09;❤️线条爱心❤️&#xff08;htmlcssjs&#xff09;❤️biu表白爱心❤️&#xff08;htmlcssjs&#xff09;❤️matlab爱心函数❤️&#xff08;需…

LSTM--火灾温度预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章地址&#xff1a; 365天深度学习训练营-第R2周&#xff1a;LSTM-火灾温度预测&#x1f356; 作者&#xff1a;K同学啊一句话介绍LSTM&#xff0c;它是RNN的进阶版&#xff0c;如果…

静态路由———初学

文章目录实验需求:关键命令&#xff1a;静态路由默认路由实验配置接下来是配置pc的IP地址静态路由的配置保存实验需求: PC1 在 LAN1 中&#xff0c;PC2 在 LAN2 中&#xff0c;使用静态路由实现 pc1 和 pc2 之间的互相通信 本实验使用Cisco Packet Tracer 模拟器搭建 所有的路…

公考求的是稳定,搞IT求的是高薪,鱼和熊掌能否兼得?

程序员和公务员&#xff0c;大概是最让大家耳熟能详的两种职业。 这也是中国现代年轻人最具有代表性的两种职业。 程序员是从事程序开发、程序维护的专业人员。一般将程序员分为程序设计人员和程序编码人员&#xff0c;但两者的界限并不非常清楚&#xff0c;特别是在中国。软…

Verilog功能模块——Uart收发

摘要本文分享了一种通用的Uart收发模块&#xff0c;可实现Uart协议所支持的任意波特率&#xff0c;任意位宽数据&#xff08;5~8&#xff09;&#xff0c;任意校验位&#xff08;无校验、奇校验、偶校验、1校验、0校验&#xff09;&#xff0c;任意停止位&#xff08;1、1.5、2…

前端反爬思考,好友从百度搜到了我的文章,链接却是别人的

今天感叹可以改完八阿哥早点下班&#xff0c;在吃饭的时候&#xff0c;就想着自己也写了一段时间了&#xff0c;看看百度这个强大的引擎能不能搜到我的博客文章。 1、发现文章被爬走了 吃饭的时候用手机搜的&#xff0c;感觉还挺开心&#xff0c;我还给朋友炫耀&#xff0c;你看…

Import Error: from torchtext.data import to_map_style_dataset解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…

电子统计台账:快速设置产品的排除与保留

目录 1 基础操作 2 设置垂直过滤模板 2.1 排除法 2.2 保留法 3 完成其他设置 4 小提示&#xff1a;项目导入导出 实践中&#xff0c;企业数据文件中可能有很多产品&#xff0c;中间混杂诸如“累计”、“合计”、“报表人”、“企业负责人”等信息。我们需要用简单的操作完…

洛谷千题详解 | P1018 [NOIP2000 提高组] 乘积最大【C++、Python、Java、pascal语言】

博主主页&#xff1a;Yu仙笙 专栏地址&#xff1a;洛谷千题详解 目录 题目描述 输入格式 输出格式 输入输出样例 解析&#xff1a; C源码&#xff1a; Python源码&#xff1a; Pascal源码&#xff1a; Java源码&#xff1a; -------------------------------------------------…

苯丙氨酸甲酯双三氟甲基磺酰亚胺[PheC1][Tf2N]氨基酸酯离子液体

苯丙氨酸甲酯双三氟甲基磺酰亚胺[PheC1][Tf2N]氨基酸酯离子液体 纯度&#xff1a;95% 外观与形状:液体/固体, 储存:存放于惰性气体之中 应避免湿气 (吸湿) 包装规格(Packing):50g、100g、500g 保存方法&#xff1a;密闭&#xff0c;阴凉&#xff0c;通风干燥处 氨基酸酯…

返回Series或DataFrame中指定列中指定数量的最小值nsmallest()函数

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 返回Series或DataFrame中 指定列中指定数量的最小值 nsmallest()函数 [太阳]选择题 下列说法错误的是? import pandas as pd mySeries pd.Series([31, 21, 11]) print("【显示】mySer…

Numpy手撸softmax regression

算法介绍 Softmax 回归&#xff08;或多项逻辑回归&#xff09;是将逻辑回归推广到我们想要处理多个类的情况。 在逻辑回归中&#xff0c;我们假设标签是二元的&#xff1a;y(i)∈{0,1}y^{(i)} \in \{0,1\}y(i)∈{0,1},我们使用这样的分类器来区分两种手写数字。 Softmax 回归…

C#项目实战|人脸识别考勤

此文主要通过WinForm来制作的一个人脸识别考勤打卡程序&#xff0c;有兴趣的小伙伴可以接入到打卡机上。 一、实现流程1.1、创建项目1.2、设计页面1.3、创建应用1.4、获取Token及参数解析1.5、与人脸数据比对并展示一、实现流程 1.1、创建项目 打开Visual Studio&#xff0c;右…

值得入手的键盘——Keychron K8 Pro

目录 一、前言 二、介绍 三、上手体验 四、总结 一、前言 在如今&#xff0c;外设产品市场相当火爆的时代&#xff0c;拥有诸多知名的品 牌&#xff0c;而一个新品牌要在竞争非常激烈的情况下站稳脚跟&#xff0c;实属不易。诞生于2017年的 Keychron 以其品质作为高端战略…

【mcuclub】舵机-SG90

一、实物图&#xff08;SG90&#xff09; 二、原理图 编号名称功能1GND电源地&#xff08;棕色线&#xff09;2VCC电源正&#xff08;红色线&#xff09;3I/O信号线&#xff08;黄色线&#xff09; 三、简介 舵机&#xff08;英文叫Servo&#xff09;&#xff0c;是伺服电机的…

WINDOWS核心编程--Windows程序内部运行机制

现代的桌面应用基本上很少使用原始的 Windows API 进行开发了&#xff0c;因为使用原始 API 堆砌出来的应用代码逻辑非常繁琐&#xff0c;特别是窗口消息的处理非常不方便&#xff0c;大多数直接使用 C# 或者 QT 这种跨平台的开发库&#xff0c;而那种直接封装 Windows API 而存…