一、模块化与组件化

  • 模块化的定义

模块化在Node中是一个规范,定义一些模块的相关的规则,从代码角度上来说,方便做区别,如果不使用模块化,写在js文件中不利于后期维护和扩展,从代码的层面上就把相关的功能脱离出来,所以模块化从从代码的角度触发,分析项目,把项目中一些功能类型的代码,单独抽离为一个个的模块,那么为了保证大家以相同的方式去封装模块,于是我们就创造了CommentJS规范

  • 模块化的优点

在我们项目中,如果需要是实现相同的功能,就不需要再重写,所以模块化从一定程度上提高我们的开发效率,有一些相关模块,直接调用就可以了,方便项目开发,和后期的维护与扩展

  • 组件化:

把页面中样式差不多的东西抽为单独的小组件,把需要经常复用的东西封装为一个单独的,今后需要用的时候直接拿就可以,不用再重写,从ui的角度触发去考虑问题,把页面中代码结构类似的区域抽离出来,封装成一个单独的小组件 ;前端的组件化,方便UI组件的重用;

  • 组件化的优点:

随着项目规模的发展,我们手中的组件会越来越多,我们今后一个页面的ui,几乎都可以从手中拿现成的组件拼接出来,方便项目的开发和维护

二、创建全局组件的方式

1. 创建全局组件的方式一

  1. 先调用 Vue.extend()得到组件的构造函数
  1. var com1 = Vue.extend({
  2. template: '<h2>这是创建的第一个全局组件</h2>'
  3. // template 属性,表示这个组件的 UI 代码解构
  4. })
  1. 通过vue.component('组件的名称',组件的构造函数)来注册全局组件
  1. Vue.component('mycom1', com1)
  2. //com1就是组件的构造函数

注意:

组件的名称如果是驼峰命名,那么引入的时候表名称得加连字符 -

1.如果 Vue.component('myCom1','com1')

对应的组件标签是

2. 如果是Vue.component('myCom1Test','com1')

对应组件标签为:

3. 如果Vue.component('my-com1','com1')

对应组件标签为:

  1. 把注册好的组件名称,以标签的形式引入到vm实例区域的页面中即可
  1. <div id="app">
  2. <!-- 引入全局的vue组件-->
  3. <mycom1></mycom1>
  4. </div>

来吧展示:

2. 创建全局组件的方式二

  1. 直接使用vue.component('组件的名称','组件对象')
  1. // Vue.component 的第二个参数,既接收 一个 组件的构造函数, 同时,也接受 一个对象
  2. Vue.component('mycom2', {
  3. template:'<h2>这是直接使用 Vue.component 创建出来的组件</h2>'
  4. })
  1. 把注册好的组件名称,以标签的形式引入到vm实例区域的页面中即可
  1. <div id="app">
  2. <mycom2></mycom2>
  3. </div>

来吧展示:

注意:

1.template 属性中,不能单独放一段文本,必须用标签包裹起来;

2. 如果在 template 属性中,想要放多个元素了,那么,在这些元素外,必须有唯一的一个根元素进行包裹;

  1. Vue.component('mycom2', {
  2. template:'<div><p>嘿嘿嘿嘿嘿</p><h2>这是直接使用 Vue.component 创建出来的组件</h2><h1>哈哈哈哈</h1> </div>'
  3. })

3. 创建全局组件的方式三

  1. template添加一个id选择器
  1. Vue.component('mycom3', {
  2. template: '#tpl'
  3. })
  1. 定义一个 template 标签元素

    使用 Vue 提供的 template 标签,可以定义组件的UI模板解构
  1. <div id="app">
  2. <mycom3></mycom3>
  3. </div>
  4. <template id="tpl">
  5. <h2>这是创建全局组件的第三种方式</h2>
  6. </template>

注意:

template标签中里面也必须有唯一的一个根元素进行包裹

也就是如果没有根元素包裹,那么下面代码是执行不出来了会报错

  1. <template id="tmpl">
  2. <h2>这是创建全局组件的第三种方式</h2>
  3. <p>哟哟哟哟哟哟</p>
  4. </template>

正确写法:

  1. <template id="tmpl">
  2. <div>
  3. <h2>这是创建全局组件的第三中方式</h2>
  4. <p>嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿</p>
  5. </div>
  6. </template>



既然是全局组件,那么就可以重复调用,栗子:

  1. <div id="app">
  2. <mycom3></mycom3>
  3. </div>
  4. <div id="app2">
  5. <mycom3></mycom3>
  6. </div>
  7. <template id="tmpl">
  8. <h2>这是创建全局组件的第三中方式</h2>
  9. </template>
  1. <script>
  2. Vue.component('mycom3', {
  3. template: '#tmpl'
  4. })
  5. var vm = new Vue({
  6. el: '#app',
  7. });
  8. var vm2 = new Vue({
  9. el: '#app2',
  10. });
  11. </script>

三、创建私有组件

创建一个私有组件

  1. <div id="app">
  2. <mycom4></mycom4>
  3. </div>
  1. var vm = new Vue({
  2. el: '#app',
  3. data: {},
  4. methods: {},
  5. components: {
  6. // 定义实例中私有组件的 组件的名称 和组件的 解构
  7. 'mycom4': {
  8. template: '<h6>这是定义的私有组件</h6>'
  9. }
  10. }
  11. });

创建多个私有组件:

  1. <div id="app">
  2. <mycom4></mycom4>
  3. <mycom5></mycom5>
  4. </div>
  1. components:{
  2. mycom4:{
  3. template:'<h2>这是我定义的私有组件1</h2>'
  4. },
  5. mycom5:{
  6. template:'<h2>这是我定义的私有组件2</h2>'
  7. }
  8. }

四、组件中相应数据和展示方法

  1. Vue.component('mycom', {
  2. template: '<h3 @click="show">这是自定义的全局组件 ------ {{ msg }}</h3>',
  3. data: function () { //
  4. // 在 组件中,可以有自己的私有数据
  5. // 但是,组件的 data 必须是一个 function
  6. // 并且内部 return 一个 数据对象
  7. return {
  8. msg: '我是组件的内部data'
  9. }
  10. },
  11. methods: { // 尝试定义组件的私有方法
  12. show() {
  13. // console.log('出发了组件的私有show方法!')
  14. alert('我是组件内部的方法')
  15. }
  16. }
  17. })

思考:

为什么要把 组件中的 data 定义为一个function呢?

因为这样做的话,每当我们在页面上引用一次组件,必然会先调用 这个 data function,

从而得到一个当前组件私有的 数据对象;

五、切换组件

1. 结合flag标识符和 v-ifv-else 实现组件的切换

  1. <div id="app">
  2. <!-- 使用按钮去控制显示login和res-->
  3. <input type="button" value="显示登录" @click="flag=true"/>
  4. <input type="button" value="显示注册" @click="flag=false"/>
  5. <login v-if="flag"></login>
  6. <!-- 当flag:true的时候显示login-->
  7. <!-- 当flag:false的时候显示res-->
  8. <res v-else="flag"></res>
  9. </div>
  10. <script>
  11. Vue.component('login', {
  12. template: '<h2>登录</h2>'
  13. })
  14. Vue.component('res', {
  15. template: '<h2>注册</h2>'
  16. })
  17. // 创建 Vue 实例,得到 ViewModel
  18. var vm = new Vue({
  19. el: '#app',
  20. data:{
  21. flag:false
  22. },
  23. methods:{}
  24. })
  25. </script>

2. 切换多个组件

  1. <div id="app">
  2. <!--想要显示哪个组件就在:is属性的后面传入(字符串)=====> '组件的名字'-->
  3. <component :is="'com1'"></component>
  4. <component :is="'com3'"></component>
  5. </div>
  1. Vue.component('com1', {
  2. template: '<h2>我是第1个组件</h2>'
  3. })
  4. Vue.component('com2', {
  5. template: '<h2>我是第2个组件</h2>'
  6. })
  7. Vue.component('com3', {
  8. template: '<h2>我是第3个组件</h2>'
  9. })
  10. Vue.component('com4', {
  11. template: '<h2>我是第4个组件</h2>'
  12. })



进行多组件的切换

  1. <div id="app">
  2. <!--点击a链接,修改component的值
  3. component标签结合is属性进行组件的切换-->
  4. <a href="#" @click="comname='com1'">显示组件1</a>
  5. <a href="#" @click="comname='com2'">显示组件2</a>
  6. <a href="#" @click="comname='com3'">显示组件3</a>
  7. <a href="#" @click="comname='com4'">显示组件4</a>
  8. <component :is="comname"></component>
  9. </div>
  1. var vm = new Vue({
  2. el: '#app',
  3. data:{
  4. comname:'com1'
  5. },
  6. //当vue解析文件到component标签时,如果有:is属性就会解析后面的字符串"comname"
  7. //然后去data中寻找这个变量
  8. //comname:'com1'
  9. //正好是一个字符串的变量的名称,就会显示名称叫com1的组件
  10. methods:{}
  11. })

3.为组件切换添加动画

  1. <transition>
  2. <component :is="comname"></component>
  3. </transition>
  1. <style>
  2. .v-enter,
  3. .v-leave-to{
  4. opacity:0;
  5. transform: translate(100px);
  6. }
  7. .v-enter-active,
  8. .v-leave-active{
  9. transition: all 0.4s ease;
  10. }
  11. </style>



如上图效果显示,有标准流的影响,所以要脱离标准流的影响,让离开的组件脱离标准流

  1. <style>
  2. .....
  3. .v-enter-active,
  4. .v-leave-active{
  5. transition: all 0.4s ease;
  6. position: absolute;
  7. }
  8. </style>



如图动画效果是先进入再离开,如果想要实现先离开再进入,则只需要在transition中添加mode="out-in"

  1. <transition mode="out-in"> -
  2. <component :is="comname"></component>
  3. </transition>



如果想要实现离开往左走,进入往右走的效果,则:

  1. <style>
  2. .v-enter {
  3. /* 即将进入时候的坐标 */
  4. opacity: 0;
  5. transform: translateX(100px);
  6. }
  7. .v-leave-to {
  8. /* 离开时候,最终到达的位置 */
  9. opacity: 0;
  10. transform: translateX(-100px);
  11. }
  12. </style>

六、父组件通过属性绑定向子组件传递数据

  1. 把要传递给子组件的数据,作为自定义属性,通过v-bind绑定到子组件身上
  1. <com :sonmsg="pmsg"></com>
  1. 在子组件中,不能直接使用父组件传递过来的数据,需要先用props 来接收一下
  1. props: ['sonmsg']
  1. 在接收父组件传递过来的props的时候,一定要和父组件中传递过来的自定义属性名称保持一致
  1. template: '<h2>我是子组件-----{{sonmsg}}</h2>',

具体代码如下:

  1. <body>
  2. <div id="app">
  3. <com :sonmsg="pmsg"></com>
  4. <!-- 以属性绑定的方式将父组件中的值传递给子组件-->
  5. <!-- 这里相当于把 '我是父组件中的数据'放在这边 也就是 msg123='我是父组件中的数据'-->
  6. <!-- 但是如果子组件想用msg需要在子组件中定义一下-->
  7. </div>
  8. <script>
  9. var vm = new Vue({
  10. el: '#app',
  11. data: {
  12. pmsg:'我是父组件中的数据'
  13. },
  14. methods: {},
  15. components: { // 定义私有组件
  16. 'com': { // 在Vue中,默认,子组件无法直接获取父组件中的数据
  17. template: '<h2>我是子组件-----{{sonmsg}}</h2>',
  18. props: ['sonmsg']
  19. // 在Vue中,只有 props 是数组,其它带 s 后缀的属性都是 对象
  20. }
  21. }
  22. });
  23. </script>
  24. </body>

七、父组件向子组件传递对象

  1. 把要传递给子组件的对象,作为自定义属性,通过v-bind绑定到子组件身上
  1. <com1 :msgobj123="msgObj"></com1>
  1. 在子组件中,不能直接使用父组件传递过来的对象,需要先用props 来接收一下
  1. props: ['msgobj123']
  1. 在接收父组件传递过来的props的时候,一定要和父组件中传递过来的自定义属性名称保持一致
  1. template: '<h3>后面传递的是父组件中对象 ---- {{ JSON.stringify(msgobj123) }}</h3>'
  1. template: '<h3>哈哈 {{ JSON.stringify(msgobj) }}</h3>',

具体代码如下:

  1. <body>
  2. <div id="app">
  3. <com1 :msgobj123="msgObj"></com1>
  4. </div>
  5. <script>
  6. var vm = new Vue({
  7. el: '#app',
  8. data: {
  9. msgObj: {
  10. id:1,
  11. name:'千夏Chinatsu',
  12. age:18
  13. }
  14. },
  15. methods: {},
  16. components: {
  17. 'com1': {
  18. template: '<h3>后面传递的是父组件中对象 ---- {{ JSON.stringify(msgobj123) }}</h3>',
  19. props: ['msgobj123']
  20. }
  21. }
  22. });
  23. </script>
  24. </body>

八、父组件向子组件传递方法

  1. 把要传递给子组件的方法,通过v-on绑定事件到子组件身上
  1. <com v-on:func="show()"></com>
  1. 在子组件中,不能直接使用父组件传递过来的方法,需要先用$emit() 来接收一下
  1. this.$emit('func')
  1. 在接收父组件传递过来的$emit()中,一定要和父组件中传递过来的方法名称保持一致

具体代码:

  1. <body>
  2. <div id="app">
  3. <com v-on:func="show()"></com>
  4. </div>
  5. <script>
  6. var vm = new Vue({
  7. el:'#app',
  8. data:{},
  9. methods:{
  10. show(){
  11. console.log('触发了父组件中的show()方法')
  12. }
  13. },
  14. components: {
  15. 'com': {
  16. template: '<input type="button" value="这是子组件的按钮" @click="btnClick()"/>',
  17. methods:{
  18. btnClick(){
  19. // console.log('hhhh')
  20. this.$emit('func')
  21. }
  22. }
  23. }
  24. }
  25. })
  26. </script>
  27. </body>

总结:

1.如果要向子组件传递 data 中的数据,则 使用 属性绑定的形式 v-bind:

2. 如果要向子组件传递 methods 中的 方法,则 使用 事件绑定的形式 v-on:

九、子组件向父组件传递数据

  1. <body>
  2. <div id="app">
  3. <!-- 方式一:-->
  4. <com v-on:func="show"></com>
  5. <!-- $emit('func',1)后面要传递参数-->
  6. <!-- 方式二:-->
  7. <!-- <com v-on:func="show(2)"></com>-->
  8. <!-- 然后$emit('func')后面就不用传递参数-->
  9. </div>
  10. <script>
  11. var vm = new Vue({
  12. el:'#app',
  13. data:{},
  14. methods:{
  15. show(arg){
  16. console.log('触发了父组件中的show()方法' + arg)
  17. // '--------'
  18. }
  19. },
  20. components: {
  21. 'com': {
  22. template: '<input type="button" value="这是子组件的按钮" @click="btnClick()"/>',
  23. data:function(){
  24. return{
  25. sonmsg:'这是子组件中的数据'
  26. }
  27. },
  28. methods:{
  29. btnClick(){
  30. this.$emit('func','嘿嘿嘿嘿嘿')
  31. }
  32. }
  33. }
  34. }
  35. })
  36. </script>
  37. </body>



所以可以直接在show()方法中传入子组件中的data数据

  1. methods:{
  2. show(arg){
  3. console.log('触发了父组件中的show()方法' +'--------'+ arg)
  4. // '--------'
  5. }
  6. },
  7. components: {
  8. 'com': {
  9. template: '<input type="button" value="这是子组件的按钮" @click="btnClick()"/>',
  10. data:function(){
  11. return{
  12. sonmsg:'这是子组件中的数据'
  13. }
  14. },
  15. methods:{
  16. btnClick(){
  17. // console.log('hhhh')
  18. this.$emit('func','嘿嘿嘿嘿嘿')
  19. // this.$emit('func',this.sonmsg)
  20. }
  21. }
  22. }
  23. }



把子组件传递过来的数据,保存到 父组件的 data 中

  1. methods: {
  2. show(arg) {
  3. // console.log('触发了父组件中的show()方法' +'--------'+ arg)
  4. // 把子组件传递过来的数据,保存到 父组件的 data 中
  5. this.msgFormSon = arg
  6. console.log(this.msgFormSon)
  7. }
  8. },

总结:

子组件向父组件传值,本质上,还是调用了父组件传递过来的方法

只不过,子组件在调用的时候,把 数据 当作参数,传给这个方法了;

十、练习列表案例(结合父子组件传值)

  1. <body>
  2. <div id="app">
  3. <!-- 评论框区域 -->
  4. <cmt-box @func="addNewCmt"></cmt-box>
  5. <ul>
  6. <cmt-item v-for="(item, i) in list" :item="item" :key="i"></cmt-item>
  7. </ul>
  8. </div>
  9. <script>
  10. Vue.component('cmt-item', {
  11. template: `<li>
  12. <h3>评论人:{{ item.name }}</h3>
  13. <h5>评论内容:{{ item.content }}</h5>
  14. </li>`,
  15. props: ['item']
  16. })
  17. Vue.component('cmt-box', {
  18. template: `<div>
  19. <label>评论人:</label>
  20. <br>
  21. <input type="text" v-model="name">
  22. <br>
  23. <label>评论内容:</label>
  24. <br>
  25. <textarea v-model="content"></textarea>
  26. <br>
  27. <input type="button" value="发表评论" @click="postComment">
  28. </div>`,
  29. data: function () {
  30. return {
  31. name: '',
  32. content: ''
  33. }
  34. },
  35. methods: {
  36. postComment() { // 发表评论
  37. // console.log('ok')
  38. const cmt = { name: this.name, content: this.content }
  39. // 子组件中,调用父组件传递过来的方法,然后可以把 子组件的数据,当作参数,传递给父组件的方法去使用
  40. this.$emit('func', cmt)
  41. this.name = this.content = ''
  42. // console.log(cmt)
  43. }
  44. }
  45. })
  46. var vm = new Vue({
  47. el: '#app',
  48. data: {
  49. list: [
  50. { name: 'zs', content: '沙发' },
  51. { name: 'ls', content: '板凳' },
  52. { name: 'qqq', content: '凉席' },
  53. { name: 'eee', content: '砖头' }
  54. ]
  55. },
  56. methods: {
  57. addNewCmt(cmt) { // 添加新评论
  58. // console.log(cmt)
  59. this.list.push(cmt)
  60. }
  61. }
  62. });
  63. </script>
  64. </body>

十一、使用rel属性来获取页面中的元素

  1. <body>
  2. <div id="app">
  3. <input value="按钮" type="button" @click="show()"/>
  4. <!--<h2 id="myh2">{{msg}}</h2>-->
  5. <!--加入ref属性-->
  6. <h2 id="myh2" ref="hhh">{{msg}}</h2>
  7. </div>
  8. <script>
  9. var vm = new Vue({
  10. el:'#app',
  11. data:{
  12. msg:'嘿嘿嘿嘿嘿'
  13. },
  14. methods:{
  15. show(){
  16. //原生想要获取h2中的数据的方法
  17. // var res = document.getElementById('myh2').innerHTML
  18. //console.log(res)
  19. console.log(this)
  20. console.log(this.$refs.hhh)
  21. console.log(this.$refs.hhh.innerHTML)
  22. }
  23. }
  24. })
  25. </script>
  26. </body>

在h2标签中没有加入ref属性的打印console.log(this)结果



在h2标签加入ref属性的打印console.log(this)结果



所以可以通过rel可以很方便的来获取元素

  1. console.log(this)
  2. console.log(this.$refs.hhh)
  3. console.log(this.$refs.hhh.innerHTML)

十二、使用rel属性来获取页面中的组件





所以可以根据msg去修改组件内部的数据或者调用子组件中的方法

  1. <body>
  2. <div id="app">
  3. <input value="按钮" type="button" @click="getCom()" />
  4. <com1 ref="xxxxx"></com1>
  5. </div>
  6. <script>
  7. Vue.component('com1', {
  8. template:'<h2>这是一个小组件---{{msg}}</h2>',
  9. data:function () {
  10. return {
  11. msg:'这是组件内部数据'
  12. }
  13. },
  14. methods:{
  15. show(){
  16. console.log('子组件中的方法被调用了')
  17. }
  18. }
  19. })
  20. var vm = new Vue({
  21. el:'#app',
  22. data:{
  23. msg:'这是父组件的数据'
  24. },
  25. methods:{
  26. getCom(){
  27. // console.log(this)
  28. this.$refs.xxxxx.msg = '组件内部数据被修改了'
  29. this.$refs.xxxxx.show()
  30. }
  31. }
  32. })
  33. //页面上可以为很多元素创建ref的引用
  34. </script>
  35. </body>

十三、在vue组件中data和props的区别

  • data 在组件中,要被定义成一个function,并且要返回一个对象
  • props 在组件中,要被定义成数组,其中,数组的值都是字符串名,表示从父组件传递过来的数据
  • props中的数据,不要直接拿来修改,如果想要修改,必须在data上重新定义一个属性,然后把属性的值从this.props直接拿过来
  • data 上的数据,都是组件自己私有的,数据都是可读可写的
  • props 都是外界传递过来的数据,数据只能读取,不能重新写入

vue学习笔记(六) ----- vue组件的更多相关文章

  1. vue学习笔记(六)表单输入绑定

    前言 在上一章vue学习笔记(四)事件处理器这一篇博客的内容中,我们已经了解vue是如何绑定事件的,而本篇博客主要讲解的是vue中表单输入的绑定,通常我们自己提交信息的时候都是通过表单将信息到服务器的 ...

  2. Vue学习笔记之Vue组件

    0x00 前言 vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来.组件的使用更使我们的项目解耦合.更加符合vue的设计思想MVVM. 那接下来就跟我看一下如何在一个Vue实例 ...

  3. 【Vue学习笔记】—— vue的基础语法 { }

    学习笔记 作者:oMing vue v-on: 简称 @ <div id='app'> <button v-on:click='Show1'> </button> ...

  4. vue学习笔记(二)vue的生命周期和钩子函数

    前言 通过上一章的学习,我们已经初步的了解了vue到底是什么东西,可以干什么,而这一篇博客主要介绍vue的生命周期和它常用的钩子函数,如果有学过java的园友可能有接触到在学习servlet的时候学过 ...

  5. vue学习笔记:vue的认识与特点与获取

    Vue了解 Vue:读作 view Vue是一个渐进式框架 与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计. Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整 ...

  6. Vue学习笔记六:v-model 数据双向绑定

    目录 v-model简介和适用范围 新建HTML 所见即所得 v-model模拟简易计算器 v-model简介和适用范围 Vue的一大特点之一就是数据的双向绑定,v-model就是实现这个功能的指令, ...

  7. vue学习笔记—bootstrap+vue用户管理

    vue,读音view,简单易用的前端框架.特点如下: 1.一个mvvm的前端框架,内部做好了html中dom对象和后台用js语言定义的变量的双向绑定 2.中国人尤雨溪维护的个人项目,中文资料多,和go ...

  8. Vue学习笔记之Vue指令系统介绍

    所谓指令系统,大家可以联想咱们的cmd命令行工具,只要我输入一条正确的指令,系统就开始干活了. 在vue中,指令系统,设置一些命令之后,来操作我们的数据属性,并展示到我们的DOM上. OK,接下来我们 ...

  9. Vue学习笔记之Vue学习前的准备工作

    0x00 起步 1.扎实的HTML/CSS/Javascript基本功,这是前置条件. 2.不要用任何的构建项目工具,只用最简单的<script>,把教程里的例子模仿一遍,理解用法.不推荐 ...

  10. VUE学习笔记之vue cli 构建项目

    一.环境搭建: 1.安装node.js 从node.js官网下载并安装node,安装过程很简单,一路"下一步"就可以了.安装完成之后,打开命令行工具(win+r,然后输入cmd), ...

随机推荐

  1. python语言概述

    python语言的发展 python语言诞生于1990年,由Guide van Rossum设计并领导开发. python语言是开源项目的优秀代表,其解释器的全部代码都是开源的. 编写Hello程序 ...

  2. JMeter Websocket 二进制Binary压力测试或接口测试

    背景 最近在做游戏项目,做好java服务端,需要本地调试Websock服务,并且是二进制binary形式传输,网上的很多都是text形式传输的测试页面,所以不符合要求.为了解决websocket的二进 ...

  3. HTML & CSS & JavaScript 从一个表格到一个灰阶颜色表 03

    工具1:HBuilder X 1.9.9.20190522 工具2:火狐浏览器 67.0.4 (64 位) 其实,我还想使用表格,做一个这样的颜色表,如下图所示: 如果按照之前的做法,把每一种颜色都列 ...

  4. vscode编写python,引用本地py文件出现红色波浪线

    前言 引用本地py文件出现红色波浪线,如下图: 原因 经过查询得知,vscode中的python插件默认使用的是pylint来做代码检查,因此需要对pylint做一些配置 解决方案 在setting. ...

  5. 每日一题 LeetCode 679. 24点游戏 【递归】【全排列】

    题目链接 https://leetcode-cn.com/problems/24-game/ 题目说明 题解 主要方法:递归 + 全排列 解释说明: 将 4 个数进行组合形成算式,发现除了 (a❈b) ...

  6. K8S基础

    四组基本概念 Pod/Pod控制器 Name/Namespace Label/Label选择器 Service/Ingress Pod Pod是k8s里能够被运行的最小的逻辑单元(原子单元) 1个Po ...

  7. 【手摸手,带你搭建前后端分离商城系统】01 搭建基本代码框架、生成一个基本API

    [手摸手,带你搭建前后端分离商城系统]01 搭建基本代码框架.生成一个基本API 通过本教程的学习,将带你从零搭建一个商城系统. 当然,这个商城涵盖了很多流行的知识点和技术核心 我可以学习到什么? S ...

  8. 迅雷bt种子的制作

    BT是目前最热门的下载方式之一,它的全称为"BitTorrent"简称"BT",中文全称"比特流",但很多朋友将它戏称为"变态下载 ...

  9. CSS精灵图与字体图标

    CSS精灵图与字体图标 1. 精灵图 当用户访问一个网站时,需要向服务器发送请求,网页上的每张图像都要经过一次请求才能展现给用户.然而,一个网页中往往会应用很多小的背景图像作为修饰,当网页中的图像过多 ...

  10. day33 Pyhton 常用模块03

    一.正则表达式: 1.元字符 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线 \s 匹配任意的空白符 \d 匹配数字 \n 匹配一个换行符 \t 匹配一个制表符 \b 匹配一个单词的结尾 ...