axios与fetch实现数据请求
    1.fetch
    why:用来替代AJAX的
        XMLHttpRequest 是一个设计粗糙的API,配置和调用方式非常混乱,而且基于事件的异步模型写起来不友好,
        用的不多的原因:兼容性不好 
        polyfill:如果要兼容ie8,https://github.com/camsong/fetch-ie8
        fetch("index.json").then(res=>{
                    return res.json();
                }).then(res=>{
                    console.log(res)
                })
        默认是get方法,如果要使用POST方法 ,header中还有一种application json格式,
        application/x-www-form-urlencoded 匹配的格式body:"name=kewin&id=112",这些都要和后端对接好字段
        post1:
        fetch("index.json",{
                    method:'post',
                    headers:{
                        "Content-Type":"application/x-www-form-urlencoded"
                    },
                    body:"name=kewin&id=112"
                }).then(res=>{
                    return res.json();
                }).then(res=>{
                    console.log(res);
                    this.datalist = res.data.films;
                })
        post2:
                fetch("index.json",{
                    method:'post',
                    headers:{
                        "Content-Type":"application/json"
                    },
                    body:JSON.stringify{
                        "name":"kewin",
                        "age":11
                    }
                }).then(res=>{
                    return res.json();
                }).then(res=>{
                    console.log(res);
                    this.datalist = res.data.films;
                })
        fetch默认是不包含cookie的,如果需要拿到cookie的数据,需要添加credentials:"include"
        fetch("index.json",{
                    method:'post',
                    headers:{
                        "Content-Type":"application/json"
                    },
                    body:JSON.stringify{
                        "name":"kewin",
                        "age":11
                    },
                    credentials:"include"
    2.axios
        专门做数据请求的,  get方法
            axios.get("index.json").then(res=>{
                console.log(res);
                this.datalist = res.data.data.films
            })
        post方法
            axios.get("index.json",{
                myname:'kawin',
                myage:11
            }).then(res=>{
                console.log(res);
                this.datalist = res.data.data.films
            })
    3.mixins
        混入(mixins)是一种分发Vue组件中可复用功能的非常灵活的方式,
        混入对象可以包含任意组件选项。
        当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。如果VUE当中与混入的有同名的现象,vue中的方法优先级比较高。
        var obj = {
            methods:{
                methodsA(){
                    console.log('methodsA');
                }
            }
        }
        mixins:[obj],
    4.虚拟DOM与diff算法key的作用。
        如果他们的父节点不相同,创建的时候会直接删除div这个元素,创建一个p元素,如果他们的父节点相同, 则会最大限度的复用他们的元素,只是修改了里面的内容,而不会删除创建元素,
        <div v-if="isShow">111</div>
        <p v-else>222</p>
 
    5.组件化开发基础   
        扩展HTML元素,封装可重用的代码
 
    关闭eslint
        vue.config.js lintOnSave:false
        .eslintrc 删除 '@vue/standard'
 
    组件化安装axios
        cnpm install --save axios
        跨域问题,进行反向代理
        proxy代理
            module.exports = {
            devServer: {
                proxy: {
                '/ajax': {
                    target: 'http://m.maoyan.com/',
                    //   ws: true,代表websocket
                    changeOrigin: true
                }
                }
            }
            }
        vue.config.js中配置publicPath:'./'
            类似Cordova hybird应用的文件系统中(配合hash模式)
 
        MPA(多页面)应用的配置
            module.exports = {
                pages: {
                    index: {
                    // page 的入口
                    entry: 'src/index/main.js',
                    // 模板来源
                    template: 'public/index.html',
                    // 在 dist/index.html 的输出
                    filename: 'index.html',
                    // 当使用 title 选项时,
                    // template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
                    title: 'Index Page',
                    // 在这个页面中包含的块,默认情况下会包含
                    // 提取出来的通用 chunk 和 vendor chunk。
                    chunks: ['chunk-vendors', 'chunk-common', 'index']
                    },
                    // 当使用只有入口的字符串格式时,
                    // 模板会被推导为 `public/subpage.html`
                    // 并且如果找不到的话,就回退到 `public/index.html`。
                    // 输出文件名会被推导为 `subpage.html`。
                    subpage: 'src/subpage/main.js'
                }
                }
        我们可以不等着后端给数据,可以使用json server来模拟数据
            cnpm install -g json-server
        开启JSON Server
                json-server --watch db.json
        引入swiper
            cnpm install --save swiper
        引入better-scroll
            cnpm install --save better-scroll
        vuex
            先dispatch到actions中,进行异步操作,返回数据再将数据提交到mutations中进行操作,再将状态改变提交到state,状态改变了,自然影响了状态中的所有的组件
            @/components/child1'// @代表src这个层级
        element ui
        mint ui手机端
          npm i element-ui -S安装
          npm i mint-ui -S
          import ElementUI from 'element-ui'
          import 'element-ui/lib/theme-chalk/index.css'
          import MintUI from 'mint-ui'
          import 'mint-ui/lib/style.css'
          Vue.use(ElementUI)
    rem dpr
        <script>
            var ratio = window.devicePixelRatio;
            var meta = document.querySelector('[name=viewport]');
            meta.setAttribute('content',`width=device-width,initial-scale=${1/ratio},user-scalable=no`)


            document.documentElement.style.fontSize = window.innerWidth / 750 * 100 + 'px'
        </script>
    移动端事件相关
        1.click事件300ms延迟
            移动web页面上的click事件响应都要慢上300ms
            移动设备访问web页面时往往需要双击或者捏开放大页面后来看清页面的具体内容
            正是为了确认用户是单击还是双击,safari需要300ms的延迟来判断
            后来的iphone也一直沿用这样的涉及,同时android也借鉴沿用了这样的设计
            于是300毫秒的延迟就成为了默认的规范
            解决:1.设置meta viewport 
                user-scalable=no,有兼容性问题
            2.fastclick.js
                兼容性比较好
                if ('addEventListener' in document) {
                    document.addEventListener('DOMContentLoaded', function() {
                        FastClick.attach(document.body);
                    }, false);
                }
                或者模块化安装
                cnpm install fastclick --save
                main.js中 
                    import FastClick from 'fastclick'
                    fastclick.attach(document.body)
        2.Zepto.js
            zepto是一个轻量级的针对现代高级浏览器的javascript库,它与jquery有着类似的api,
            1.提供JQUERY的类似的API,但并不是100%覆盖JQUERY,
            2.zepto不支持旧版本的ie浏览器 <10
            3.zepto添加了完整的touch手势支持,解决300ms演示(tap取代click)
            移动端浏览器默认支持四个事件touchstart touchmove touchend touchcancel
            tap事件touchstart touchmove touchend 3个事件模拟实现的
12-16 12:55