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

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

这里提出一个解决方案:

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

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

2、定义main函数

  1. require.config({
  2. paths: {
  3. "text": 'https://cdn.bootcss.com/require-text/2.0.12/text.min',
  4. 'vueLoader': 'componentLoader',
  5. 'article': '../components/article',
  6. 'color': '../components/dialog/color',
  7. 'util': './common/util',
  8. 'app': './workspace/vueSet',
  9. },
  10. waitSeconds: 3
  11. });
  12.  
  13. require(['vueLoader', 'componentConfig', 'app'], (CptLoader, commCpt, app) => {
  14. CptLoader.config(commCpt,()=>{
  15. setTimeout(()=>{
  16. app.$mount(app.$el);
  17. })
  18. })
  19. });

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

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

  1. /**
  2. * 组件加载器
  3. */
  4.  
  5. //缓存Vue对象
  6. var pool = {};
  7.  
  8. define([], () => {
  9. //根据path获取名称
  10. function cal(path) {
  11. let r = path.split('/');
  12. return r[r.length - 1];
  13. }
  14.  
  15. return {
  16. /**
  17. * 加载全局配置单
  18. * @param configs
  19. */
  20. config(configs, res){
  21. return new Promise(() => {
  22. configs.forEach((path, index) => {
  23. require(['text!../components/' + path + '.html', '../components/' + path], (html, js) => {
  24. let v = {
  25. template: html,
  26. mixins: [
  27. js
  28. ]
  29. };
  30. pool[path] = v;
  31. let name = cal(path);
  32. Vue.component('v-' + name, pool[path]);
  33. if (res && index == configs.length - 1)
  34. res();
  35. });
  36. });
  37. });
  38. },
  39. /**
  40. * 加载指定path的组件,返回Promise
  41. * @param path
  42. * @returns {function(*)}
  43. */
  44. load(path){
  45. return res => {
  46. let t;
  47. if (t = pool[path])
  48. res(t);
  49. else
  50. require(['text!../components/' + path + '.html', '../components/' + path], (html, js) => {
  51. let v = {
  52. template: html,
  53. mixins: [
  54. js
  55. ]
  56. };
  57. pool[path] = v;
  58. res(v);
  59. });
  60. }
  61. }
  62. };
  63. });

它提供了两个函数:

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

b、load,加载单个vue组件

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

4、编写组件html和js

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

js示例如下所示:

  1. define(['app','vueLoader'], (app,loader) => {
  2. return {
  3. props: ['module', 'toggleIcon', 'thisModule', 'moduleList', 'addModuleListIndex', 'moduleCategoryList', 'iconName'],
  4. data(){
  5. return {
  6. showElement: false,
  7. type: 'tplList',
  8. moduleConfig: [
  9. {
  10. name: '文字',
  11. type: 'wordage',
  12. flag: 0,
  13. },
  14. {
  15. name: '图片',
  16. type: 'groupArea',
  17. flag: 0,
  18. },
  19. {
  20. name: '地图',
  21. type: 'map',
  22. flag: 1,
  23. },
  24. {
  25. name: '地图2',
  26. type: 'map',
  27. flag: 1,
  28. }
  29. ],
  30. }
  31. },
  32. created(){
  33. console.log('module-list create');
  34. },
  35. mounted(){
  36. console.log('module-list mounted');
  37. },
  38. methods: {
  39. //添加模板切换功能加显示对应的模块列表
  40. showModuleList: function (index, moduleName) {
  41. app.showModuleList(index, moduleName);
  42. },
  43. toggleIcon(){
  44. this.iconName = this.iconName == this.type ? "" : this.type;
  45. //加载内容的代码转移到此处
  46. }
  47. },
  48. components:{
  49. 'palette-item':loader.load('palette-item'),
  50. test:{
  51. template:'<div>123</div>'
  52. }
  53. }
  54. }
  55. });

利用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. python函数调用的四种方式 --基础重点

    第一种:参数按顺序从第一个参数往后排#标准调用 # -*- coding: UTF-8 -*- def normal_invoke(x, y): print "--normal_invoke ...

  2. Android 实战美女拼图游戏 你能坚持到第几关

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40595385,本文出自:[张鸿洋的博客] 1.概述 继2048之后,今天给大家带 ...

  3. vue.js小总结

    Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统; 指令带有前缀 v-,以表示它们是 Vue 提供的特殊特性; v-for 指令可以绑定数组的数据来渲染一个项目列 ...

  4. 最新的爬虫工具requests-html

    使用Python开发的同学一定听说过Requsts库,它是一个用于发送HTTP请求的测试.如比我们用Python做基于HTTP协议的接口测试,那么一定会首选Requsts,因为它即简单又强大.现在作者 ...

  5. Ordering犀利的比较器

    Ordering是Guava类库提供的一个犀利强大的比较器工具,Guava的Ordering和JDK Comparator相比功能更强.它非常容易扩展,可以轻松构造复杂的comparator,然后用在 ...

  6. POJ_1269_Intersecting Lines_求直线交点

    POJ_1269_Intersecting Lines_求直线交点 Description We all know that a pair of distinct points on a plane ...

  7. 使用jquery 的ajax 与 Java servlet的交互

    由于是使用jquery的 所以别忘记导入jq 下面是jsp文件 <%@ page language="java" contentType="text/html; c ...

  8. 如何在ST官网下载STM32固件库

    1.首先要注册一个ST账号,下载的时候需要. 2.找到工具与软件 3.进去之后选"产品列表" 4.在产品列表里选STM32微控制器软件,直接点下图标号2,不要点左边的加号 5.进去 ...

  9. Python多版本管理-pyenv

    经常遇到这样的情况: 系统自带的Python是2.x,自己需要Python 3.x,此时需要在系统中安装多个Python,但又不能影响系统自带的Python,即需要实现Python的多版本共存,pye ...

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

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