• vue之组件化开发


    一、简述

      1、组件Component是自定义封装代码的功能。在前端开发过程中,经常出现多个网页的功能是重复的,而且很多不同的页面之间,也存在同样的功能。

      2、而在网页中实现一个功能,需要使用html定义功能的内容结构,使用css声明功能的外观样式,还要使用js来定义功能的特效,因此就产生了把一个功能相关的html、css和js代码封装在一起组成一个整体的代码块的模式,就称之为“组件”。

      3、组件就是一个html网页中的功能,一般就是一个标签,标签中有自己的html内容结构,css样式和js特效。这样,前端人员就可以在组件化开发时,只需要书写一次代码,随处引入即可使用。

    二、普通组件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="vue.min.js"></script>
    </head>
    <body>
    <div id="id1">
        <demo1></demo1>
        <demo1></demo1>  <!-- 可重复使用 -->
    </div>
    
    <!------------------------------------>
    <script>
        // 新建组件对象,第一个参数为组件名,后续以该命名的标签引用组件
        Vue.component('demo1', {
            // 组件的html代码
            template: `<div>
            <button @click="num--">-</button>
            <input type="text" v-model="num">
            <button @click="num++">+</button>
                      </div>`,
            // 组件中用到的数据如下书写
            data: function () {
                return {
                    num: 0
                }
            },
            // 组件中其他属性跟vue对象书写方式一致
            watch: {
                num: function () {
                    if (this.num < 0) {
                        this.num = 0
                    }
                }
            }
        })
    
        let vueObj = new Vue({
            el: '#id1',
            data: {}
        })
    </script>
    </body>
    </html>
    View Code

    三、vue-cli安装

      1、要使用单文件组件需要提前安装准备一些组件开发工具,一般情况下,单文件组件运行在自动化工具vue-cli中,它可以帮我们把单文件组件编译成普通的js代码。所以我们需要在电脑先安装搭建vue-CLI工具。

      2、官网:https://cli.vuejs.org/zh/

      3、node.js:要使用vue-cli,需要先安装node.js,node.js是一个新的后端语言,它的语法和js类似,所以可以说它是属于前端的后端语言。

      4、node.js的版本有两大分支,待node.js安装成功,用 node -v 查看当前node.js的版本号。

        ①官方发布的版本:0.xx.xx。

        ②社区发布的版本:xx.xx.x。

      5、后端语言和前端语言的区别:

        ①运行环境:后端语言一般运行在服务器端,前端语言运行在客户端浏览器上。

        ②功能:后端语言可以操作文件,可以读写数据库,前端语言不能操作文件,不能读写数据库。

      6、nvm/nvm-windows:用于管理同一台电脑中多个node.js的版本。

      7、nvm与node.js的介绍与安装:

        ①https://github.com/coreybutler/nvm-windows/releases

        ②https://www.jianshu.com/p/d0e0935b150a

        ③https://www.jianshu.com/p/622ad36ee020。  

        ④https://nodejs.org/en/download/

      8、常用的nvm命令,需要先设置环境变量。

        ①nvm list:列出目前在nvm里面安装的所有node版本。

        ②nvm install node版本号 :安装指定版本的node.js。

        ③nvm uninstall node版本号 :卸载指定版本的node.js。

        ④nvm use node版本号:切换当前使用的node.js版本。

      9、使用nvm工具可以直接下载安装node.js和npm,如果速度比较慢的,可以修改nvm的配置文件settings.txt中的相关参数。

      10、在安装完node.js后,在node.js中会同时帮我们安装一个npm包管理器npm。我们可以借助npm命令来安装node.js的包。这个工具相当于python的pip管理器,常用指令:

        ①npm install -g 包名:安装模块,-g表示全局安装,如果没有-g,则表示在当前项目安装。

        ②npm list:查看当前项目下已安装的node包。

        ③npm view 包名 engines:查看包所依赖的Node的版本 。

        ④npm outdated:检查包是否已经过时,命令会列出所有已过时的包。

        ⑤npm update 包名:更新node包。

        ⑥npm uninstall 包名:卸载node包。

        ⑦npm 命令 -h :查看指定命令的帮助文档。

      11、安装vue-cli指令:npm install -g vue-cli。

     四、通过vue-cli生成项目目录

      1、简介:使用vue-cli自动化工具可以快速搭建单页应用项目目录,该工具为现代化的前端开发工作流提供了开箱即用的构建配置。只需几分钟即可创建并启动一个带热重载、保存时静态检查以及可用于生产环境的构建配置的项目。

      2、创建启动流程:

        ①vue init webpack 项目目录名:生成一个基于webpack模板的新项目。

        ②cd 项目目录路径:切换到项目目录下。

        ③npm run dev:启动node提供的测试http服务器。

        ④ctrl+c:停止服务。

      3、项目目录结构:

        ①src:主开发目录,要开发的单文件组件全部在这个目录下的components目录下。

        ②static:静态资源目录,所有的css,js,图片等资源文件放在这个文件夹。

        ③dist:项目打包发布文件夹,最后要上线单文件项目文件都在这个文件夹中,初始并未创建,后面打包项目,让项目中的vue组件经过编译变成js代码以后,dist文件夹就会出现了。

        ④node_modules:是node的依赖包目录。

        ⑤config:配置目录。

        ⑥build:项目打包时依赖的目录。

        ⑦src/router:路由,后面需要我们在使用router路由的时候再自己创建。

      4、vue项目的执行流程:

        ①主文件index.html ===> 引入 ===>

        ②src文件夹中的main.js ===> 导入 ===>

        ③src文件夹中的顶级单文件组件App.vue ===> 组件嵌套/路由引用 ===>

        ④components文件夹中的其他单文件组件。

    五、单文件组件的基本使用

      1、普通组件与单文件组件:

        ①普通组件的缺点:

          --- html代码是作为js的字符串进行编写,所以组装和开发的时候不易理解,而且没有高亮效果。

          --- 普通组件用在小项目中非常合适,但是复杂的大项目中,如果把更多的组件放在html文件中,那么维护成本就会变得非常昂贵。

          --- 普通组件只是整合了js和html,但是css代码被剥离出去了。使用的时候的时候不好处理。

        ②单文件组件:将一个组件相关的html结构,css样式,以及交互的js代码从html文件中剥离出来,合成一个文件,这种文件就是单文件组件,相当于一个组件具有了结构、表现和行为的完整功能,方便组件之间随意组合以及组件的重用,这种文件的扩展名为“.vue”,比如:"HelloWorld.vue"。

      2、创建单文件组件:新建vue文件 ===> 在vue文件中编辑三个标签:编写视图、vm对象和css样式代码。

        ①<template></template>中:新建一个唯一外层div,html代码都在这个div中书写。

        ②<script></script>中的export default { name: 'Too', }中:编写vm对象代码,必须要有export default声明,才可以导出给外界使用。

        ③<style scoped></style>中:编写css样式代码,声明了scoped,才表示当前组件私有。

      3、在App.vue中导入并引用单文件组件的步骤:

        ①<script></script>中:import HelloWorld from './components/Too'。

        ②vm对象的components属性中:添加Too。

        ③视图中以<Too></Too>引用该单文件组件。

    六、单文件组件的嵌套

      1、简述:有时候开发vue项目时,一个页面也可以算是一个大组件,这个大组件是由若干个小组件组成的,此时,大组件就是父组件,小组件就是子组件,父组件调用了子组件。

      2、例如,在components目录下有一个大组件Father.vue,可以在同级建一个FatherSon目录用于存放Father.vue需要调用的子组件,随后,按照调用组件三步走即可在父组件中调用子组件了。

    七、嵌套组件之间传递数据

      1、父组件传给子组件:

        ①实例:

    <!-- 这是父组件 -->
    <template>
      <div>
        <!-- 在子组件的标签属性内自定义属性用于传递数据 -->
        <!-- 传递变量需要加冒号,直接传递字符串则不需要加冒号 -->
        <Son :from_father="to_son" from_father_2="父传子的字符串"></Son>
      </div>
    </template>
    
    <script>
      import Son from "./FatherSon/Son";
    
      export default {
        name: "Father",
        data: function () {
          return {
            to_son: '父传子的数据'
          }
        },
        components: {
          Son
        }
    
      }
    </script>
    
    <style scoped>
    
    </style>
    View Code
    <!-- 这是子组件 -->
    <template>
      <div>
        <!-- 子组件接收到的父组件传递来的数据,可以如data属性中的变量一样使用 -->
        <p>子组件处:{{from_father}}</p>
        <p>子组件处:{{from_father_2}}</p>
      </div>
    </template>
    
    <script>
      export default {
        name: "Son",
        data: function () {
          return {}
        },
        // 子组件用于接收父组件传递来数据的属性,填入父组件自定义的标签属性名,后续以该名字为变量名使用
        props: [
          'from_father',
          'from_father_2'
        ]
      }
    </script>
    
    <style scoped>
    
    </style>
    View Code

        ②注意事项:

          --- 传递数据是变量,这种数据称之为"动态数据传递",需要加冒号。

          --- 传递数据不是变量,这种数据称之为"静态数据传递",不需要加冒号。

          --- --- 父组件中修改了数据,在子组件中会被同步修改,但是,子组件中的数据修改了,是不是影响到父组件中的数据,这也被称为"单向数据流"。

       2、子组件传给父组件:

        ①实例:

    <!-- 这是父组件 -->
    <template>
      <div>
        <!-- 在子组件的标签属性内自定义属性用于传递数据 -->
        <!-- 传递变量需要加冒号,直接传递字符串则不需要加冒号 -->
        <!-- 在子组件的标签属性内用@子组件传来的事件名接收子组件传来的事件与数据,并传给自己的方法属性 -->
        <Son :from_father="to_son" from_father_2="父传子的字符串"
             @to_father_event="from_son_event" @to_father_event_2="from_son_event_2"></Son>
        <p>父组件处:{{from_son_data}}</p>
        <p>父组件处:{{from_son_str}}</p>
        <p>父组件处:{{from_son_data_2}}</p>
        <p>父组件处:{{from_son_str_2}}</p>
      </div>
    </template>
    
    <script>
      import Son from "./FatherSon/Son";
    
      export default {
        name: "Father",
        data: function () {
          return {
            to_son: '父传子的数据',
            from_son_data: null,
            from_son_data_2: null,
            from_son_str: null,
            from_son_str_2: null,
          }
        },
        components: {
          Son
        },
        methods: {
          // 接收了子组件传来的事件与数据的方法属性可以自定义后续逻辑
          from_son_event: function (v1, v2) {
            this.from_son_data = v1
            this.from_son_str = v2
          },
          from_son_event_2: function (v1, v2) {
            this.from_son_data_2 = v1
            this.from_son_str_2 = v2
          }
        }
    
      }
    </script>
    
    <style scoped>
    
    </style>
    View Code
    <!-- 这是子组件 -->
    <template>
      <div>
        <!-- 子组件接收到的父组件传递来的数据,可以如data属性中的变量一样使用 -->
        <p>子组件处:{{from_father}}</p>
        <p>子组件处:{{from_father_2}}</p>
        <p>按下给父组件递的值会变化:
          <button @click="num_add">点击</button>
        </p>
      </div>
    </template>
    
    <script>
      export default {
        name: "Son",
        data: function () {
          return {
            to_father: '子传给父的数据',
            to_father_2: 0
          }
        },
        // 子组件用于接收父组件传递来数据的属性,填入父组件自定义的标签属性名,后续以该名字为变量名使用
        props: [
          'from_father',
          'from_father_2'
        ],
        created() {
          // 子组件通过该方法将事件与数据传给父组件
          this.$emit('to_father_event', this.to_father, '子传父的字符串1')
        },
        methods: {
          num_add: function () {
            this.to_father_2++
            this.$emit('to_father_event_2', this.to_father_2, '子传父的字符串2')
          }
        }
      }
    </script>
    
    <style scoped>
    
    </style>
    View Code

     八、组件中使用axios

      1、简述:默认情况下,vue项目中并没有对axios包的支持,所以需要先使用npm安装包:npm install axios。

      2、实例:

    // The Vue build version to load with the `import` command
    // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
    import Vue from 'vue'
    import App from './App'
    
    Vue.config.productionTip = false
    
    // 导入axios
    import axios from 'axios'
    // 将导入的axios挂载到全局的vm对象中用自定义属性名接收,后续所有的vm对象都可以用该属性名调用axios
    Vue.prototype.$axios = axios
    
    /* eslint-disable no-new */
    new Vue({
      el: '#app',
      components: {App},
      template: '<App/>'
    })
    View Code
    <template>
      <div>
        <p>{{weather_data}}{{error_msg}}</p>
      </div>
    </template>
    
    <script>
      export default {
        name: "Weather",
        data: function () {
          return {
            weather_data: null,
            error_msg: null
          }
        },
        created() {
          this.$axios.get('http://wthrcdn.etouch.cn/weather_mini',
            {
              params: {
                city: '南京'
              }
            }).then(
            response => {
              this.weather_data = response.data
            }
          ).catch(error => {
            this.error_msg = error
          })
        }
      }
    </script>
    
    <style scoped>
    
    </style>
    View Code
  • 相关阅读:
    Android Bitmap 载入与像素操作
    java poi读取excel公式,返回计算值(转)
    模块化Java简介
    java模式
    java—三大框架详解,其发展过程及掌握的Java技术慨括
    java设计模式、框架、架构、平台之间的关系
    POI 怎么设置Excel整列的CellStyle啊
    POI设置EXCEL单元格格式为文本、小数、百分比、货币、日期、科学计数法和中文大写
    POI对EXCEL的操作【重点:如何设置CELL格式为文本格式】
    ActiveX插件的Z-Index属性无效问题解决
  • 原文地址:https://www.cnblogs.com/caoyu080202201/p/13184459.html
Copyright © 2020-2023  润新知