通常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. CentOS7下安装rabbitmq消息队

    安装如下步骤: 1.首先安装erlang yum install erlang 注:如果出现No package erlang available. rpm -Uvh http://download. ...

  2. CentOS6.7 mysql5.6.33修改数据文件位置

    问题:mysql存放的数据文件,分区容量较小,目前已经满,导致mysql连接不上, 解决方案: 1.删除分区里一个不需要用的数据,如:日志文件等(解决不了根本问题) 2.对某个磁盘扩容 3.修改数据存 ...

  3. 虚拟机搭建CentOS主机win10通过xshell连接

    目标:主机是win10系统,虚拟机搭建CentOS,在主机上通过XShell连接操作. 第一步 主机上安装虚拟机 第二步 下载CentOS 下载地址http://101.110.118.69/isor ...

  4. 推荐《用Python进行自然语言处理》中文翻译-NLTK配套书

    NLTK配套书<用Python进行自然语言处理>(Natural Language Processing with Python)已经出版好几年了,但是国内一直没有翻译的中文版,虽然读英文 ...

  5. 你不知道的JavaScript--Item19 执行上下文(execution context)

    在这篇文章里,我将深入研究JavaScript中最基本的部分--执行上下文(execution context).读完本文后,你应该清楚了解释器做了什么,为什么函数和变量能在声明前使用以及他们的值是如 ...

  6. Extjs--12种布局方式

    按照Extjs的4.1的文档来看,extjs的布局方式大致有12种,下面一一介绍,有些代码就是文档中的. 1.Border 边界布局 border布局,最多可以将页面分割为"东南西北中&qu ...

  7. Java Script 读书笔记 (三) 函数

    1. 函数作用域 在函数内部定义的变量,外部无法读取,称为"局部变量"(local variable). 变量v在函数内部定义,所以是一个局部变量,函数之外就无法读取. 函数内部定 ...

  8. HashMap和LinkedHashMap的区别

    参考:https://blog.csdn.net/a822631129/article/details/78520111 java为数据结构中的映射定义了一个接口java.util.Map;它有四个实 ...

  9. diskqueue.go

    }

  10. Poi2010 Monotonicity 2

    树状数组优化dp 可以证明最优解一定是通过之前的最优转移过来的,所以每一个点只需要保存以该节点为结尾的最长长度即可 对于不同符号,等于号维护数组,大于小于维护树状数组 #include<cstd ...