webpack 打包不会玩,整了这么个小玩具

一段 vue 绑定代码,关键点在 gmallComponent

1、异步加载外部 vue 文件(非 .vue)

2、按一定规则拆分 template、script、style

new Vue({
el: '#app_vuejs_replace',
data: {
search_key : '',
results : [],
pageindex : 1,
selecteditem : null
},
components: {
'vue-test': gmallComponent('gz/test.html', {
props: ['items']
})
}
});

gz/test.html 使用习惯几乎遵循 vue 原生,定义模板、脚本、样式

<div>
<div>I am async!</div>
<div v-for="item in items" @click="onclick(item.company_name)">
{{item.web_title}}
</div>
</div> <script>
export = {
methods: {
onclick: function(msg) {
showTip(msg);
}
}
}
</script> <style>
.fade-enter-active, .fade-leave-active {
transition: opacity .9s
}
.fade-enter, .fade-leave-active {
opacity: 0
}
</style>

将以下代码定义到公共 .js 文件中

<script type="text/javascript">
function gmallComponent(url, vuecom) {
if (!vuecom) vuecom = {};
return function(resolve, reject) {
$.get(url).done(function(r) {
var rl = r.toLowerCase();
var style = '';
var styleIndexEnd = rl.lastIndexOf('</style>');
var styleIndex = rl.lastIndexOf('<style', styleIndexEnd);
if (styleIndexEnd !== -1 && styleIndex !== -1) {
style = r.substring(styleIndex, styleIndexEnd);
style = style.substr(style.indexOf('>') + 1);
style = '<component scoped :is="\'style\'">' + style + '</component>';
} var scriptIndexEnd = rl.lastIndexOf('<\/script>');
var scriptIndex = rl.lastIndexOf('<script', scriptIndexEnd);
if (scriptIndexEnd !== -1 && scriptIndex !== -1) {
var script = r.substring(scriptIndex, scriptIndexEnd);
script = script.substr(script.indexOf('>') + 1);
script = '(' + script.replace(/export\s*=\s*\{/i, '{') + ')';
var obj = eval(script);
for (var a in obj) vuecom[a] = obj[a];
}
var template = r.substring(0, Math.min(styleIndex, scriptIndex));
if (style) {
var index = template.lastIndexOf('</');
if (index !== -1) template = template.substr(0, index) + style + template.substr(index);
}
vuecom.template = template;
debugger
resolve(vuecom);
});
};
}

不使用 webpack,vuejs 异步加载模板的更多相关文章

  1. 黄聪:不使用 webpack,vuejs 异步加载模板

    webpack 打包不会玩,整了这么个小玩具 一段 vue 绑定代码,关键点在 gmallComponent 1.异步加载外部 vue 文件(非 .vue) 2.按一定规则拆分 template.sc ...

  2. React配合Webpack实现代码分割与异步加载

    这是Webpack+React系列配置过程记录的第四篇.其他内容请参考: 第一篇:使用webpack.babel.react.antdesign配置单页面应用开发环境 第二篇:使用react-rout ...

  3. Vue(基础七)_webpack(webpack异步加载原理)

    ---恢复内容开始--- 一.前言 1.webpack异步加载原理’                                           2.webpack.ensure原理     ...

  4. webpack异步加载业务模块

    虽然把我们用到的JS文件全部打包一个可以节省请求数,但如果打包后的JS文件过大,那么也容易出现白屏现象,许多操作失灵.而且一些区域是点到才出现,那么相关的JS其实可以剥离出这个大JS文件外.这就涉及到 ...

  5. webpack分片chunk加载原理

    首先,使用create-react-app快速创建一个demo npx create-react-app react-demo # npx命令需要npm5.2+ cd react-demo npm s ...

  6. Vue.js 子组件的异步加载及其生命周期控制

    前端开发社区的繁荣,造就了很多优秀的基于 MVVM 设计模式的框架,而组件化开发思想也越来越深入人心.这其中不得不提到 Vue.js 这个专注于 VM 层的框架. 本文主要对 Vue.js 组件化开发 ...

  7. require.ensure的用法;异步加载-代码分割;

    webpack异步加载的原理 webpack ensure相信大家都听过.有人称它为异步加载,也有人说做代码切割,那这 个家伙到底是用来干嘛的?其实说白了,它就是把js模块给独立导出一个.js文件的, ...

  8. Webpack按需加载一切皆模块

    前言 在学习 Webpack 之前,我们需要了解一个概念:模块. 何为模块? 如果你曾学过 Java , C# 之类的语言,一定会知道 Java 中的 import 或 C# 中的 using 吧? ...

  9. webpack前端模块加载工具

    最近在看许多React的资料,发现了大部分的项目都是用webpack行模块化管理的工具.这次也是借着写了一个React-Todos的小应用,对webPack最基本实用的功能体验了一番,顺带做个小记录. ...

随机推荐

  1. MFC中打开选择文件夹对话框,并将选中的文件夹地址显示在编辑框中

    一般用于选择你要将文件保存到那个目录下,此程序还包含新建文件夹功能 BROWSEINFO bi; ZeroMemory(&bi, sizeof(BROWSEINFO));  //指定存放文件的 ...

  2. Luogu_2597_[ZJOI2012]灾难 倍增lca + 构造

    Luogu_2597_[ZJOI2012]灾难 倍增lca + 构造 题意: 我们用一种叫做食物网的有向图来描述生物之间的关系:一个食物网有N个点,代表N种生物,如果生物x可以吃生物y,那么从y向x连 ...

  3. CTF中常见的加解密(经典)

    今天一早起来,就要去做早操,心里苦呀! 但是不影响我为未来的学弟学妹整理资料的心情呀!希望我的一些拙见能够帮助到学弟学妹! 永远爱你们的 ---- 新宝宝 ASCII编码 ASCII 码使用指定的7 ...

  4. 原生wcPop.js消息提示框(移动端)、内含仿微信弹窗效果

    wcPop.js移动端消息对话框插件是之前的wxPop.js的升级版,优化了js和css,并且新增了仿微信弹窗效果, 是一款含有多种情景模式的原生模态消息对话框代码,可用于替代浏览器默认的alert弹 ...

  5. 一文带你超详细了解Cookie

    cookie 简介 什么是 cookie cookie,有时我们也用其复数形式 cookies,是服务端保存在浏览器端的数据片段.以 key/value的形式进行保存.每次请求的时候,请求头会自动包含 ...

  6. CentOS7搭建本地YUM仓库,并定期同步阿里云源

    CentOS7同步阿里云镜像rpm包并自建本地yum仓库 系统环境 # cat /etc/centos-release CentOS Linux release 7.6.1810 (Core) # u ...

  7. Redis 实战篇之搭建集群

    Redis 集群简介# Redis Cluster 即 Redis 集群,是 Redis 官方在 3.0 版本推出的一套分布式存储方案.完全去中心化,由多个节点组成,所有节点彼此互联.Redis 客户 ...

  8. 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

    从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器 之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Calibu ...

  9. es6学习笔记-async函数

    1 前情摘要 前段时间时间进行项目开发,需求安排不是很合理,导致一直高强度的加班工作,这一个月不是常说的996,简直是936,还好熬过来了.在此期间不是刚学会了es6的promise,在项目有用到pr ...

  10. 跟踪测试 DbContext ,向"不是真正的 ORM" 说拜拜

    FreeSql 发展到现在,已经有两种稳定的开发模式,以下先简单带过一下.后面才是本文的主题. 方法一:基于 helper 的方式,祼用: dotnet add package FreeSql 提供 ...