Vue学习笔记(二)

作者: 千锋HTML5学院 | 来源:发表于2020-08-12 12:10 被阅读0次

    一. 数据请求

    1. fetch

    why

    • XMLHttpRequest 是一个设计粗糙的 API,配置和调用方式非常混乱,

    • 而且基于事件的异步模型写起来不友好。

    • 兼容性不好

    polyfill

    //https://github.com/camsong/fetch-ie8
    
    
        //get
            fetch("**").then(res=>res.json()).then(res=>{console.log(res)})
            fetch("**").then(res=>res.text()).then(res=>{console.log(res)})
        //post
            fetch("**",{
                  method:'post',
                  headers: {
                            "Content-Type": "application/x-www-form-urlencoded"
                           },
                  body: "name=kerwin&age=100"
            }).then(res=>res.json()).then(res=>{console.log(res)});
            fetch("/users",{
                
                  method:'post',
                  // credentials: 'include',
                  headers: {
                            "Content-Type": "application/json"
                           },
                  body: JSON.stringify({
                    name:"kerwin",
                    age:100
                  })
            }).then(res=>res.json()).then(res=>{console.log(res)});
    

    注意

    Fetch 请求默认是不带 cookie 的,需要设置 fetch(url, {credentials: 'include'})
    

    2.axios

    axios.get("") 
       axios.post("") 
       axios.put("")
       axios.delete("")
    ​
       axios({
        url:"",
        headers:{
          'X-Client-Info': '{"a":"3000","ch":"1002","v":"1.0.0","e":"1"}',
          'X-Host': 'mall.cfg.common-banner'
        }
       }).then(res=>{
        console.log(res.data);
       })
    ​
       返回的数据会被包装
    ​
        {
          *:*
          data:真实后端数据
        }
    

    二. 组件

    1. 虚拟dom与diff算法 key的作用

    (1)把树按照层级分解

    (2) 同key值对比

    (3) 同组件对比

    2. 为什么组件化

    扩展 HTML 元素,封装可重用的代码

    3. 组件注册方式

    • a.全局组件
    • b.局部组件

    4. 组件编写方式与Vue实例的区别

    • 自定义组件需要有一个root element

    • 父子组件的data是无法共享

    • 组件可以有data,methods,computed....,但是data 必须是一个函数

    5. 组件通信

    i. 父子组件传值 (props down, events up)

    ii. 属性验证

    props:{name:Number} Number,String,Boolean,Array,Object,Function,null(不限制类型)

    iii. 事件机制

    a.使用 $on(eventName) 监听事件

    b.使用 $emit(eventName) 触发事件

    iv. Ref

    <input ref="mytext"/> this.$refs.mytext

    v. 事件总线

    var bus = new Vue();

    • mounted生命周期中进行监听

    6. 动态组件

    • <component> 元素,动态地绑定多个组件到它的 is 属性

    • <keep-alive> 保留状态,避免重新渲染

    7. slot插槽 (内容分发)

    • 混合父组件的内容与子组件自己的模板-->内容分发

    • 父组件模板的内容在父组件作用域内编译;子组件模板的内容在子组件作用域内编译。

    a. 单个slot

    b. 具名slot

    注意 v-slot 只能添加在 template 上, 文本节点也可以当具名插槽内容插入

    8. transition过渡

    Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。

    (1)单元素/组件过渡

    • css过渡

    • css动画

    • 结合animate.css动画库

    (2) 多个元素过渡(设置key)

    • 当有相同标签名的元素切换时,需要通过 key 特性设置唯一的值来标记以让 Vue 区分它们,否则 Vue 为了效率只会替换相同标签内部的内容。

    mode:in-out ; out-in

    (3)多个组件过渡

    (4)列表过渡(设置key)

    不同于 transition, 它会以一个真实元素呈现:默认为一个 <span>。你也可以通过 tag 特性更换为其他元素。

    • 提供唯一的 key 属性值

    9. 生命周期

    i. 生命周期各个阶段

    https://cn.vuejs.org/v2/guide/instance.html#%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E5%9B%BE%E7%A4%BA

    ii. 生命周期钩子函数的触发条件与作用

    10. swiper学习

    https://www.swiper.com.cn/

    11. 自定义组件的封装

    自定义封装swiper组件(基于swiper)

    注意: 防止swipe初始化过早

    三. 指令

    1. 自定义指令

    (1)自定义指令介绍 directives - 对普通 DOM 元素进行底层操作

    (2)钩子函数

    • 参数 el,binding,vnode,oldvnode

    • bind,inserted,update,componentUpdated,unbind

    (3)函数简写

    (4)自定义指令-轮播

    • inserted 插入最后一个元素时初始化swiper

    2. nextTick

    • this.$nextTick()

    四.过滤器

    https://cn.vuejs.org/v2/guide/filters.html

    全局写法

    局部写法

    可以串联

    过滤器是 JavaScript 函数,因此可以接收参数

    这里,filterA 被定义为接收三个参数的过滤器函数。其中 message 的值作为第一个参数,普通字符串 'arg1' 作为第二个参数,表达式 arg2 的值作为第三个参数。

    五、.单文件组件

    1.写法

    https://cn.vuejs.org/v2/guide/single-file-components.html

    a.
        <template>
             html代码
        </template> 
        <script>
            js代码
        </script>
        <style>
            css代码
        </style>
    b.
        <template>
            html代码
        </template>
        <script src="相对路径的外部的js"></script>
        <style src="相对路径的外部的css"></style>
    ​
    

    2.vue-cli3.0的使用

    npm install -g @vue/cli (一次安装)

    vue create myapp

    • npm run serve 开发环境构建

    • npm run build 生产环境构建

    • npm run lint 代码检测工具

    style标签 加上scoped属性,css局部生效 style标签 加上lang="scss",支持scss

    3. Vue.config.js的配置

    (1) proxy代理

    https://cli.vuejs.org/zh/config/#%E5%85%A8%E5%B1%80-cli-%E9%85%8D%E7%BD%AE

       devServer: {
           port:8000, //随便改端口号
           proxy: {
                '/api': {
                    target: 'https://*.*.com',
                    host: '*.*.com',
                    changeOrigin:true
                }
          }
         }
    

    (2) alias别名配置

    @ is an alias to /src

    (3) vue.config.js 中配置 publicPath: './'

    (4)关闭eslint

    vue.config.js lintOnSave: false

    .eslintrc 删除 '@vue/standard' (对于某个规则关闭, no-new:"off" )

    4. 利用vue cli进行组件化开发

    迁移todolist、swiper案例到vue cli中

    六. 路由开发

    1. SPA概念

    2.vue-router

    • 开始
    • 动态路由匹配

    • 嵌套路由

    • 编程式导航 (js跳转) vs 声明式导航<router-link>

    • 命名路由

    • 重定向和别名

    • HTML5 History模式

    vue支持两种模式

    a. hash #/home

    b. history /home

    • 路由守卫&路由拦截

    全局拦截

    单个拦截

    • 路由懒加载

    3. 路由原理

    (1)hash路由 ==> location.hash 切换

    window.onhashchange 监听路径的切换

    (2)history路由==> history.pushState 切换

    window.onpopstate 监听路径的切换

    4. 项目

    (1) 启动案例项目开发

    (2) 利用vue-router搭建项目SPA结构

    相关文章

      网友评论

        本文标题:Vue学习笔记(二)

        本文链接:https://www.haomeiwen.com/subject/ihppdktx.html