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. Windows 使用 Visual Studio 编译 caffe

    说明:最近看 caffe 发现在 github 上下载的源码没有windows版本的,需要自己生成项目文件才能用 Visual Studio 编译,这里记录一下生成Windows项目文件的方法以及编译 ...

  2. BZOJ_3365_[Usaco2004 Feb]Distance Statistics 路程统计&&POJ_1741_Tree_点分治

    BZOJ_3365_[Usaco2004 Feb]Distance Statistics 路程统计&&POJ_1741_Tree_点分治 Description     在得知了自己农 ...

  3. VUE+webpack+npm项目中的RSA加解密

    一.安装jsencrypt npm i jsencrypt node_modules文件夹中出现jsencrypt 二.引入jsencrypt 在main.js中import: import JsEn ...

  4. python环境下实现OrangePi Zero寄存器访问及GPIO控制

    最近入手OrangePi Zero一块,程序上需要使用板子上自带的LED灯,在网上一查,不得不说OPi的支持跟树莓派无法相比.自己摸索了一下,实现简单的GPIO控制方法,作者的Zero安装的是Armb ...

  5. 函数strlen()和sizeof的区别

    函数strlen()和sizeof的区别: #include<stdio.h> #include<stdlib.h> #include<string.h> #def ...

  6. 基于SpringBoot从零构建博客网站 - 技术选型和整合开发环境

    技术选型和整合开发环境 1.技术选型 博客网站是基于SpringBoot整合其它模块而开发的,那么每个模块选择的技术如下: SpringBoot版本选择目前较新的2.1.1.RELEASE版本 持久化 ...

  7. 一个C#程序员学习微信小程序路由的笔记

    路由大家应该都知道,在微信小程序也是有的,毕竟它是单页面应用程序.在WeChat中有五种跳转方式,分别是wx.switchTab.wx.reLaunch.wx.redirectTo.wx.naviga ...

  8. ABP学习笔记(1)-使用mysql

    前言 开始学习ABP啦 下载官方模板 ​ 下载地址: https://aspnetboilerplate.com/Templates ​ 我这边选择的是.NET Core+VUE 移除SqlServe ...

  9. 带你学习AOP框架之Aspect.Core[1]

    在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的 ...

  10. 如何定义开发完成?(Definition of Done)

    最近在拜读郑晔的10x程序员工作法,收益良多,文中提出一个概念叫DoD(Definition of Done)给我的感触颇深.这让我联想到实际工作过程中,经常遇到的扯皮.争吵等各种场景,其实就和这个D ...