个人笔记|给自己看的使用Vue脚手架

2022-03-05  本文已影响0人  图骨南

初始化脚手架

看同文集下 搭建vue开发环境

脚手架结构

render函数

用于不能使用template配置项的情况

修改默认配置

ref属性与props配置

ref属性

props配置

mixin混入

混合 = 复用配置

组件里如果有很多相同的配置,可以把相同的配置拎出来单独放,组件想要的时候直接引用就好 以达到高复用率

插件 - plugins

本质上就是个对象 但是硬性要求必须包含一个install方法

scoped样式

如果不同组件里有相同类名 style可能会出现冲突

两条裙子有一模一样的商品名 但一条是短裙一条是连衣裙

但是不要紧!我们js是自上而下执行代码的!就算类名相同style不同 哪个最后执行就用哪个!

那要选哪条呢?哪条最后出现就选哪条

但是template里有标签 script里有引入 那执行顺序要按谁的来捏?Vue脚手架在解析vue文件的时候不看template里先用谁 而是看谁最新被引入

可是有在货架上摆放的先后顺序 有拿衣服的先后顺序 这要怎么算捏?当然是看手里最后拿到的是哪条,而不是看货架

很时髦嗷这个vue

TodoMVC案例

组件化编码流程(通用)

  1. 实现静态组件

    抽取组件,使用组件实现静态页面效果

    先不用考虑交互

  2. 展示动态数据

    2.1 数据的类型、名称

    2.2 数据在组件中保存

  3. 交互 -- 从绑定事件监听开始

实现静态组件

实现动态组件

考虑好数据的存放位置 数据是一个组件在用还是一些组件在用

实现交互

从绑定事件开始

props适用范围

注意事项

使用v-model

v-model绑定的值不能是props所传值

props值不能修改

props传值

props传的若是对象类型的值,修改对象中的属性时Vue不会报错

但不推荐这样做

组件的自定义事件

全局事件总线

可实现任意组件间通信

组件通信示意图

X ->外卖员,A,B -> 顾客,demo,test ->订单, D -> 商家,数据 -> 外卖

安装全局事件总线:

new Vue({
    ......
    beforeCreate() {
        Vue.prototype.$bus = this //安装全局事件总线,$bus就是当前应用的vm
},
        ......
}

使用事件总线:

  1. 接收数据

    A组件想接收数据,则在A组件中给$bus绑定自定义事件,事件的回调留在A组件自身。

    methods(){
        demo(data){......}
    }
        ......
    mounted() {
            this.$bus.$on( 'xxxx',this.demo)
        }
    
  2. 提供数据

    this.$bus.$emit( 'xxxx',数据)

解绑事件

消息订阅与发布

—种组件间通信的方式,适用于任意组件间通信。

示例:报纸的订阅与发布

消息的订阅与发布

使用步骤

  1. 安装pubsub

    npm i pubsub-js

  2. 引入

    import ubsub from 'pubsub-js '

  3. 接收数据

  4. A组件想接收数据,则在A组件中订阅消息,订阅的回调留在A组件自身。

    methods(){
        demo(data){......}
                  }
        ......
    mounted() {
            this.pid = pubsub.subscribe( 'xxx ' ,this.demo)// 订阅消息
        }
    
  5. 提供数据

    pubsub.publish( 'xxx',数据)

  6. 最好在beforeDestroy钩子中,用PubSub.unsubscribe(pid)取消订阅。

nextTick

  1. 语法

    this.$nextTick(回调函数)

  2. 作用

    下一次DOM更新结束后执行其指定的回调。

  3. 什么时候用:当改变数据后,要基于更新后的新DOM进行某些操作时,要在nextTick所指定的回调函数中执行。

过渡与动画

vue动画的理解

  1. 操作css的transitionanimation
  2. vue会给目标元素添加/移除特定的class
  3. 过渡的相关类名

vue封装的过渡与动画

动画效果

过渡效果

多个元素过渡

在过渡效果中

<transition>中只能包含一个元素

<transition-group>中可以包含多个元素,但<transition-group>中的每个元素都要有一个key

集成第三方动画

可以在JS动画网站中搜索Animate.css库,去到主页,在需要加入动画效果的组件中安装该库

npm install animate.css

然后引入该库

import 'animate.css'

根据网站指引配置动画

配置代理

安装axios

npm i axios

引入axios

例中希望请求5000端口保存的students的数据

<script>
    import axios from'axios'
    export default {
        name: 'App',
        methods: {
            get Students () {
                axios.get('http://localhost:5000').then(
                    response => {
                        console.log('',response.data)
                    },
                    error => {
                       console.log('',error.message)
                    }
                )
            }
        }
    }
</script>

服务器运行端口为8080,运行后报错,出现跨域问题

解决跨域

方法

  1. cors
  2. jsonp
  3. 配置代理服务器
    1. nginx
    2. vue-cli

vue-cli配置代理服务器

方法一

新建vue.config.js文件,添加如下配置

module.exports = {
pages: {
    index: {
        // 入口
        entry: 'src/main.js',
    },
},
    lintOnSave: false, // 关闭语法检查
    // 开启代理服务器
    devServer: {
        proxy: 'http://localhost:5000' // 需要对接的服务器
    }
}

此时可以成功获取到数据

不过之前的getlocalhost:5000代码应改为http://localhost:8080/students

方法二

在vue.config.js文件中配置具体代理规则

devServer: {
    proxy:{
        '/api': { // /api:请求前缀,写在端口号之后,匹配所有请求前缀是/api的代理路径
            target: '<url>', // 代理目标的基础路径,只要请求前缀是api,代理就将其转发给target中的服务器
            pathRewrite: {'^/api': ''} // 重写路径,使用正则表达式匹配所有以/api开头的路径,然后将/api转换为空字符串
            ws: true, // ws:用于支持websocket,vue-cli中默认为true
            changeOrigin: true // 用于控制请求头中的host值,vue-cli中默认为true,react脚手架中默认为false
        },
        '/foo': {
            target: '<other_url'
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读