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);
});
};
}

最新文章

  1. IOS网络第六天 ASI (略)
  2. php命名空间和autoload
  3. H5新出的flex布局
  4. hdu 2095
  5. c++ 相关的技术资源整理归类
  6. 使用Unity3D引擎开发赛车游戏
  7. 【Problem solved】发现输入法都是仅桌面使用,无法输入中文时
  8. 【原创】用JAVA实现大文件上传及显示进度信息
  9. linux c 及 c++打印调用者函数caller function的方法,包括arm c平台
  10. h.264宏块与子宏块类型
  11. VS 代码段 自定义
  12. BZOJ 1449: [JSOI2009]球队收益( 最小费用最大流)
  13. Inno Setup入门(八)&mdash;&mdash;有选择性的安装文件
  14. hadoop之 hadoop 2.2.X 弃用的配置属性名称及其替换名称对照表
  15. solr研磨之facet
  16. EffectiveJava阅读笔记(一)
  17. Ubuntu上安装使用WeChat、TIM
  18. apache基础
  19. 【BZOJ1211】【HNOI2004】树的计数 prufer序列
  20. #3 Codeforces-865C Gotta Go Fast(期望dp)

热门文章

  1. Django django-cors-headers实现防跨域
  2. JavaScript中使用正则表达式
  3. ArrayList和LinkedList介绍
  4. PHP发送短信
  5. Python实现一个键对应多个值的字典(multidict)
  6. 输出所有java进程的gc状态
  7. jQuery从零开始(二)
  8. iOS中计算字符串NSString的高度
  9. iOS常用算法之单链表查找倒数第n个节点(图解)
  10. Spring Boot 2 + Thymeleaf:服务器端表单验证