传统web项目不做前后端分离能否使用vue的组件化功能?

如果您知道的话,能否直观的回答我的问题?能的话怎么做,不能的话大概为什么不能?如果您想说一下,非常感谢,不想说,也谢谢

不想在一个html和一个.js文件中写太多代码,所以想把每个组建单独出来,又不知道该怎么做

感觉项目还没有大到需要做前后端分离

但是又想使用组件化功能;

该怎么使用啊, 传统web项目不支持.vue文件吧,也不支持import和export吧,

那该怎么写啊

vue是引入js文件的那种方式

阅读 14.3k
9 个回答

你需要了解下这个 cmd amd 这两种 规范 就应该知道怎么组织 vue的组件了

简单说

假设 你有个组件A.js 里面的结构入下

{
    name: 'pdHeader',
    props: {
      title: {
        type: String,
        default: '加载中...'
      },
      isPreview: {
        type: Number,
        default: 0
      },
      share: {
        type: Object,
        default: null
      }
    },
    template: '  <div class="pd-header">' +
    '    <div class="pd-header-btn back" @click="goBack"></div>' +
    '    <div class="pd-header-title">{{title}}</div>' +
    '    <div class="pd-header-btn" @click="goShare" :class="{share:share}"></div>' +
    '  </div>',
    methods: {
      goBack: function () {

      },
      goShare: function () {
        
      }
    }
  }

你需要用上面提到的 加载规范去加载他 形成一个加载器能识别的模块 就变成了下面这样

 
  define('moduleId', function (require, exports, module) {
  var component;
  component = {
    name: 'pdHeader',
    props: {
      title: {
        type: String,
        default: '加载中...'
      },
      isPreview: {
        type: Number,
        default: 0
      },
      share: {
        type: Object,
        default: null
      }
    },
    template: '  <div class="pd-header">' +
    '    <div class="pd-header-btn back" @click="goBack"></div>' +
    '    <div class="pd-header-title">{{title}}</div>' +
    '    <div class="pd-header-btn" @click="goShare" :class="{share:share}"></div>' +
    '  </div>',
    methods: {
      goBack: function () {
       
      },
      goShare: function () {
       
      }
    }
  };
  module.exports = component;
});

然后你主页面调用 就应该是类似下面的

//一个vue实例
define('moduleId2', function (require, exports, module) {
  var pdHeader = require('moduleId');
  var handle.vm=new Vue({
        el: '#app-rule',
        data: {
        
        },
        mounted: function () {
          this.postManInfo();
          
        },
        destroyed: function () {
        
        },
        components: {
          'pdHeader': pdHeader,//a.js 组件
        },
        methods: {
         
          postManInfo: function () {
          
            
          }
        }
      })
    module.exports = handle
  });

这种就是简单的一个例子 ,前提是你要知道 我说前面说的 加载规范,然后这种做法 目前我遇到的 没有用vue的路由 ,我们有自己的路由体系,这里就不展开说了。
这种做法 前期用 cmd 或者amd 规范去写模块 然后加载,

个人做法

用VUE 文件写 ,然后用webapack 或者其他打包工具(rollup) 发布 library 形式的一个js插件(具体需要你去看对应的打包设置),剩下的就是引用一下完事,插件完全按照 vue文件的写法去做,麻烦的问题就是开发过程中 调试,还有用不用babel的问题。

你现在的情况和我之前比较类似, 两三个文件承载所有的功能, 我的处理方式是这样的:
1)前期使用requirejs做模块化, 花一些时间, 把原来项目按模块拆开(这一步是最难的, 因为一边做项目, 一边还要做短期看不到成效的事情, 所以需要你主推)

2)上一期搞完之后, 在一些不太重要页面加你需要的框架,比如vue, 然后一部分一部分上, 别一起上, 风险太大.

总体来说是把事情做好, 然后把风险控到最低!

我觉得主要跟你的主管,产品,设计进行协调。我现在的公司,产品垃圾到无人有,然后设计也是死牛一条,很多时候做的东西能够复用,偏要弄的花里花俏。一大堆不实用的东西。但是你又没有办法。只能按需求做事。。

前后端分离与项目大小无关啊,只是一种架构模式而已。我自己曾经写过一个小工具,只有一个页面,三个 Web API,也是采用的前后端分离的架构来写的,项目大小不是问题。

VUE 是一个前端组件化工具,也可以使用 es6 的 import/export 语法:

clipboard.png

貌似需要 Babel 支持,所以需要 npm install 一堆东西

clipboard.png

需要配置 .babelrc,但是不需要做构建脚本的修改(用 vue-cli 初始化的项目)

使用vue并不一定非非要使用前后端分离 有时候我我们会将它运作双向绑定。和异步渲染

可以。

不使用模块化和构建工具最简单的方式是每个组件的定义及全局注册写一个 js 文件,然后在需要的页面在引入 vue.js 之后用 script 标签引入这个 js 文件即可。

当然可以,你试试不就知道了!一开始我也没用前后端分离的方式,后来用了一个基于vue的组件库 只能前后端分离了

新手上路,请多包涵

看下来,大概理解题主的问题了——前后端不分离,想通过Vue.component()注册组件,但不想把html代码写在js中,如果使用let定义template可读性与可维护性很差,而且不够优雅;

那要解决的问题编程 在js中如何引入其他静态资源;我也不知道如何解决....

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题