通常vue都是搭配webpack+vue-cli使用的

如果不在nodejs环境下开发web应用呢?

这里提出一个解决方案:

1、加载requirejs,并且指定main函数

<script data-main="js/main" src="https://cdn.bootcss.com/require.js/2.3.5/require.min.js"></script>

2、定义main函数

require.config({
paths: {
"text": 'https://cdn.bootcss.com/require-text/2.0.12/text.min',
'vueLoader': 'componentLoader',
'article': '../components/article',
'color': '../components/dialog/color',
'util': './common/util',
'app': './workspace/vueSet',
},
waitSeconds: 3
}); require(['vueLoader', 'componentConfig', 'app'], (CptLoader, commCpt, app) => {
CptLoader.config(commCpt,()=>{
setTimeout(()=>{
app.$mount(app.$el);
})
})
});

可以注意到,这提供了一个CptLoader

3、组件loader源码如下所示:

/**
* 组件加载器
*/ //缓存Vue对象
var pool = {}; define([], () => {
//根据path获取名称
function cal(path) {
let r = path.split('/');
return r[r.length - 1];
} return {
/**
* 加载全局配置单
* @param configs
*/
config(configs, res){
return new Promise(() => {
configs.forEach((path, index) => {
require(['text!../components/' + path + '.html', '../components/' + path], (html, js) => {
let v = {
template: html,
mixins: [
js
]
};
pool[path] = v;
let name = cal(path);
Vue.component('v-' + name, pool[path]);
if (res && index == configs.length - 1)
res();
});
});
});
},
/**
* 加载指定path的组件,返回Promise
* @param path
* @returns {function(*)}
*/
load(path){
return res => {
let t;
if (t = pool[path])
res(t);
else
require(['text!../components/' + path + '.html', '../components/' + path], (html, js) => {
let v = {
template: html,
mixins: [
js
]
};
pool[path] = v;
res(v);
});
}
}
};
});

它提供了两个函数:

a、config,用于加载一个数组作为配置单,该数组内的字符串都会被当作vue全局组件加载

b、load,加载单个vue组件

需要注意的是,它默认组件会全部存放在./components下

4、编写组件html和js

html即是标准的template写法,不再赘述

js示例如下所示:

define(['app','vueLoader'], (app,loader) => {
return {
props: ['module', 'toggleIcon', 'thisModule', 'moduleList', 'addModuleListIndex', 'moduleCategoryList', 'iconName'],
data(){
return {
showElement: false,
type: 'tplList',
moduleConfig: [
{
name: '文字',
type: 'wordage',
flag: 0,
},
{
name: '图片',
type: 'groupArea',
flag: 0,
},
{
name: '地图',
type: 'map',
flag: 1,
},
{
name: '地图2',
type: 'map',
flag: 1,
}
],
}
},
created(){
console.log('module-list create');
},
mounted(){
console.log('module-list mounted');
},
methods: {
//添加模板切换功能加显示对应的模块列表
showModuleList: function (index, moduleName) {
app.showModuleList(index, moduleName);
},
toggleIcon(){
this.iconName = this.iconName == this.type ? "" : this.type;
//加载内容的代码转移到此处
}
},
components:{
'palette-item':loader.load('palette-item'),
test:{
template:'<div>123</div>'
}
}
}
});

利用requirejs实现vue的模块化开发的更多相关文章

  1. [工具配置]使用requirejs模块化开发多页面一个入口js的使用方式

    描述 知道requirejs的都知道,每一个页面需要进行模块化开发都得有一个入口js文件进行模块配置.但是现在就有一个很尴尬的问题,如果页面很多的话,那么这个data-main对应的入口文件就会很多. ...

  2. 使用requirejs模块化开发多页面一个入口js的使用方式

    描述 知道requirejs的都知道,每一个页面需要进行模块化开发都得有一个入口js文件进行模块配置.但是现在就有一个很尴尬的问题,如果页面很多的话,那么这个data-main对应的入口文件就会很多. ...

  3. 初学seaJs模块化开发,利用grunt打包,减少http请求

    原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...

  4. Angular 结合RequireJs实现模块化开发

    angular的指令是模块化很好的一个体现,下面我将只使用指令(不用控制器),结合requirejs,实现模块化开发. 模块化关系图:

  5. Javascript模块化开发,使用模块化脚本加载工具RequireJS,提高你代码的速度和质量。

    随着前端JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理解代码,也便于维护和测试.模块化是一种非常好的代码组织方式,本文试着对Ja ...

  6. 在Html中使用Requirejs进行模块化开发

    在前端模块化的时候,不仅仅是js需要进行模块化管理,html有时候也需要模块化管理.这里就介绍下如何通过requirejs,实现html代码的模块化开发. 如何使用requirejs加载html Re ...

  7. Vue(十七)模块化开发

    模块化开发   使用vue-cli创建项目   1. vue-router模块化   引入vue-router cnpm install vue-router -S 1.1 编辑main.js imp ...

  8. 【模块化开发】------requireJS的基本使用------【巷子】

    前言 为了提高代码的复用度,开发人员会按照功能把大量的js代码分成若干文件,这样在多个页面就可以使用同一个文件了.,下面是某个网站的js引用情况 虽然代码的复用度提升了,但是缺点也体现了出来 缺点: ...

  9. 模块化开发RequireJS之shim配置

    一.shim requirejs使用AMD规范开发,若开发过程中加载非AMD规范js,需要使用requirejs的shim进行配置. shim配置语法为: //配置文件 requirejs.confi ...

随机推荐

  1. YII框架CGridView sql有条件分页实现

    $SQL="SELECT * FROM {{user}} WHERE `typeff`=2 order by create_time desc"; $SQL_count=" ...

  2. safari浏览器模拟ipone,ipad以及其他浏览器版本

    1.打开safari浏览器中的偏好设置 2.在偏好设置中,选择高级,勾选在菜单栏中显示开发菜单 3.打开开发,进入响应式设计模式 4.可以选择iphone 或ipad.浏览器等不同模式,进行模拟 5. ...

  3. jmeter简单的使用

    jmeter简单的使用 一般步骤是:在测试计划下面新建一个线程组,线程组下面添加请求,请求中添加结果和断言 1.打开页面: 2.添加线程组: 3.线程组中设置参数: 很重要的几个参数:线程数.ramp ...

  4. bzoj 2822 [AHOI2012]树屋阶梯 卡特兰数

    因为规定n层的阶梯只能用n块木板 那么就需要考虑,多出来的一块木板往哪里放 考虑往直角处放置新的木板 不管怎样,只有多的木板一直扩展到斜边表面,才会是合法的新状态,发现,这样之后,整个n层阶梯就被分成 ...

  5. BZOJ_2631_tree_LCT

    BZOJ_2631_tree_LCT Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上 ...

  6. BZOJ_5296_[Cqoi2018]破解D-H协议_BSGS

    BZOJ_5296_[Cqoi2018]破解D-H协议_BSGS Description Diffie-Hellman密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方在没有事先约定密钥(密码 ...

  7. (3)STM32使用HAL库操作外部中断——实战操作

    有了上一篇的基础入门知识,使用Cube创建一个简单的外部中断就容易多了. 一.Cube配置 需求:使用PD10作为外部中断(下降沿触发)控制LED(PD12-PD14) 1.选型 STM32-F4-D ...

  8. openoffice excel word 转换pdf 支持本地调用和远程调用

    OpenOffice.org 是一套跨平台的办公室软件套件,能在Windows.Linux.MacOS X (X11)和 Solaris 等操作系统上执行.它与各个主要的办公室软件套件兼容.OpenO ...

  9. 隐马尔可夫模型(HMM)总结

    摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项(算法过程,调参等注意事项) 5.实现和具体例子 6.适用场合 内容: 1.算法概述 隐马尔科夫模型(Hidden Markov ...

  10. 如何优雅地在 Spring Boot 中使用自定义注解,AOP 切面统一打印出入参日志 | 修订版

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...