原生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秒后失效