• 原生vue组件化开发模式


      随着组件化模式的发展,越来越多的模式依赖以组件化的开发模式;最典型的例子就是vue脚手架的组件化开发已经慢慢成为了前端的必备技能

      但有多种情况是我们没有用vue脚手架去做的项目,例如 前后端的混合模式,我们的代码与后端的代码共同组成一个项目,我们就没有办法使用,又或者我们明确的需求表明我们的网站的开发,不可以使用vue脚手架的模式,接下来我们该怎么使用vue的组件化开发模式

      当我们不能使用vue脚手架,我们怎么使用引入 jquery,vue 的原生文件来做这样的事

      核心思想,Vue.extend({}) 再次注册组件,为 .html 的文件格式,  $.ajax() 用于获取 .html 的文件内容,然后加入到 body 标签下面,用于加载此文件,从而完成 组件化的 开发 和 引入

      再次我们需要用两个文件来做这样的事

      这是我们的主文件 index.html

      以下方式是可以兼容到 ie9 的写法,目前没有碰到过要兼容到更低版本的需求,不过我们可以加浏览器的升级提示,如果小于ie9,提醒升级

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title> 原生vue组件的开发模式 </title>
            <!-- 先引入 Vue jquery 插件-->
            <script src="https://unpkg.com/vue/dist/vue.js"></script>
            <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
        </head>
        <body>
            <div id="app">
                <!-- 子组件 -->
                <parent></parent>
            </div>
        </body>
        
        <script>
            // 定义了全局变量,用于存放组件
            var components = {};
            // 封装了此方法,同步的请求了 .html 文件的内容,注意:不能使用异步请求
            function load(a){
                for(var i=0;i<a.length;a++){
                    $.ajax({
                        url: a[i],
                        async: false,
                        success: function(res){
                            // 在body下插入获取到 .html 文件的内容,浏览器会自动解析html标签
                            $('body').append(res);
                        }
                    })
                }
            }
            // 此封装的核心价值为按需加载,我不会一开始将所有组件都加载进来,但是加载进来的组件,我们就可以不用进行加载
            // 具体的判断方式,判断 components 的全局变量,如果有这个组件,就可以不调用这个方法
            load(['./07.html'])
            new Vue({
                el: '#app', // 这个是主组件,也是父组件
                data: function(){
                    return {
                        
                    }
                },
                components: {
                    // 如果组件的名称为驼峰式命名法,组件名称要用 - 隔开 如 tabList 标签名为 <tab-list>
                    'parent':components.parents // 子组件
                }
            })
        </script>
    </html>

      接下来我们看看vue 的组件写法,相信大家也看到了路径的格式,我们在当前的文件下创建一个 07.html 内容如下

    <style type="text/css">
        .a{
            color: red;
        }
    </style>
    <!-- 推荐使用此方式 如果使用 template 标签会报错 -->
    <script type="text/template" id="com">        
        <div> {{a}} </div>  
        <!-- 这里面就可以使用 vue 的方式 -->
    </script>
    <script>
        // 在主文件的 components 变量中赋值给 parents 属性,是为了按需加载及防止2次加载
        components.parents = Vue.extend({ // Vue.extend 的方式最好,Vue.components 的方式也是会报错
            template: '#com', // 此 id 对象 script模版的 id
            data: function(){  // 此后面的写法跟vue组件的写法一模一样,
                return {
                    a: '啊啊啊' 
                }
            },
        })
    </script>

      这是经历了两场项目的细心琢磨最好的解决方法,尝试了所有方法,此方法便于维护,所有的代码及思想写法都给了跟我一样爬坑的人,坑坑洼洼洼洼坑坑,只为下次写更好、更完美项目,加油打工人

    -------------------》

      写一下还需要攻克的问题或者避免左右的坑

      ie9的placeholder 的问题:不支持这样的写法,当使用 v-if 会出现网上的方法就是出问题

      本地存储,当使用ifream 的使用,我们可能在里面使用了第三方的域名,第三方域名下的本地存储在浏览器无痕模式下会有问题

      window.open 方法,打开新的窗口的限制,必须是用户的行为(例如 点击事件)后5秒内可以打开新窗口,5秒后失效

      

  • 相关阅读:
    $.contains(a,b)
    文件拷贝, 使用 BIO,NIO的对比,四种写法性能分析。
    win32 窗口缩放时出现闪屏
    Java: md5 加密中文 & 注意编码
    win32: 查询滚动条相关信息的注意事项
    查询字符串(性能对比): Array Vs HashMap
    多线程读取,单线程写入
    写入与读取第三方的 cookie
    asp 读cookie 下划线 丢失
    win7(旗舰版)下,OleLoadPicture 加载内存中的图片(MagickGetImageBlob),返回值 < 0
  • 原文地址:https://www.cnblogs.com/shangjun6/p/14579693.html
Copyright © 2020-2023  润新知