利用requirejs实现vue的模块化开发
通常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的模块化开发的更多相关文章
- [工具配置]使用requirejs模块化开发多页面一个入口js的使用方式
描述 知道requirejs的都知道,每一个页面需要进行模块化开发都得有一个入口js文件进行模块配置.但是现在就有一个很尴尬的问题,如果页面很多的话,那么这个data-main对应的入口文件就会很多. ...
- 使用requirejs模块化开发多页面一个入口js的使用方式
描述 知道requirejs的都知道,每一个页面需要进行模块化开发都得有一个入口js文件进行模块配置.但是现在就有一个很尴尬的问题,如果页面很多的话,那么这个data-main对应的入口文件就会很多. ...
- 初学seaJs模块化开发,利用grunt打包,减少http请求
原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...
- Angular 结合RequireJs实现模块化开发
angular的指令是模块化很好的一个体现,下面我将只使用指令(不用控制器),结合requirejs,实现模块化开发. 模块化关系图:
- Javascript模块化开发,使用模块化脚本加载工具RequireJS,提高你代码的速度和质量。
随着前端JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理解代码,也便于维护和测试.模块化是一种非常好的代码组织方式,本文试着对Ja ...
- 在Html中使用Requirejs进行模块化开发
在前端模块化的时候,不仅仅是js需要进行模块化管理,html有时候也需要模块化管理.这里就介绍下如何通过requirejs,实现html代码的模块化开发. 如何使用requirejs加载html Re ...
- Vue(十七)模块化开发
模块化开发 使用vue-cli创建项目 1. vue-router模块化 引入vue-router cnpm install vue-router -S 1.1 编辑main.js imp ...
- 【模块化开发】------requireJS的基本使用------【巷子】
前言 为了提高代码的复用度,开发人员会按照功能把大量的js代码分成若干文件,这样在多个页面就可以使用同一个文件了.,下面是某个网站的js引用情况 虽然代码的复用度提升了,但是缺点也体现了出来 缺点: ...
- 模块化开发RequireJS之shim配置
一.shim requirejs使用AMD规范开发,若开发过程中加载非AMD规范js,需要使用requirejs的shim进行配置. shim配置语法为: //配置文件 requirejs.confi ...
随机推荐
- python函数调用的四种方式 --基础重点
第一种:参数按顺序从第一个参数往后排#标准调用 # -*- coding: UTF-8 -*- def normal_invoke(x, y): print "--normal_invoke ...
- Android 实战美女拼图游戏 你能坚持到第几关
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40595385,本文出自:[张鸿洋的博客] 1.概述 继2048之后,今天给大家带 ...
- vue.js小总结
Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统; 指令带有前缀 v-,以表示它们是 Vue 提供的特殊特性; v-for 指令可以绑定数组的数据来渲染一个项目列 ...
- 最新的爬虫工具requests-html
使用Python开发的同学一定听说过Requsts库,它是一个用于发送HTTP请求的测试.如比我们用Python做基于HTTP协议的接口测试,那么一定会首选Requsts,因为它即简单又强大.现在作者 ...
- Ordering犀利的比较器
Ordering是Guava类库提供的一个犀利强大的比较器工具,Guava的Ordering和JDK Comparator相比功能更强.它非常容易扩展,可以轻松构造复杂的comparator,然后用在 ...
- POJ_1269_Intersecting Lines_求直线交点
POJ_1269_Intersecting Lines_求直线交点 Description We all know that a pair of distinct points on a plane ...
- 使用jquery 的ajax 与 Java servlet的交互
由于是使用jquery的 所以别忘记导入jq 下面是jsp文件 <%@ page language="java" contentType="text/html; c ...
- 如何在ST官网下载STM32固件库
1.首先要注册一个ST账号,下载的时候需要. 2.找到工具与软件 3.进去之后选"产品列表" 4.在产品列表里选STM32微控制器软件,直接点下图标号2,不要点左边的加号 5.进去 ...
- Python多版本管理-pyenv
经常遇到这样的情况: 系统自带的Python是2.x,自己需要Python 3.x,此时需要在系统中安装多个Python,但又不能影响系统自带的Python,即需要实现Python的多版本共存,pye ...
- python环境下实现OrangePi Zero寄存器访问及GPIO控制
最近入手OrangePi Zero一块,程序上需要使用板子上自带的LED灯,在网上一查,不得不说OPi的支持跟树莓派无法相比.自己摸索了一下,实现简单的GPIO控制方法,作者的Zero安装的是Armb ...