首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解ES6模块导入/导出

了解ES6模块导入/导出
EN

Stack Overflow用户
提问于 2019-01-29 22:07:18
回答 1查看 434关注 0票数 0

我开始学习ES6模块和import/export语法,我希望我的模块只在需要的地方执行。

我创建了两个简单的模块,这两个模块使用要运行的特定classid连接到<div>

例如:

代码语言:javascript
复制
// product.js

import Vue from 'vue/dist/vue';

export default function() {

  var app = new Vue({
    el: '#c-product',
    data: {
      counter: 0,
    },
    methods: {
      addToCart: function() {
        this.counter++;
      },
      removeFromCart: function() {
        this.counter--;
      }
    }
  });

}

然后我有另一个用于轮播的模块:

代码语言:javascript
复制
// carousel.js

import Glide from '@glidejs/glide';

export default function() {

  new Glide('.glide', {
    type: 'carousel',
    startAt: 0,
    perView: 3,
    breakpoints: {
      800: {
        perView: 2
      }
    }
  }).mount();

};

然后,我使用Gulp + Browserify将所有内容捆绑在一起,以便有一个main.js文件,我可以在其中导入和执行模块:

代码语言:javascript
复制
// main.js
import Product from './product';
import Carousel from './carousel';

Product();
Carousel();

现在我有了main.js文件,并准备将其插入到.html页面中,但根据页面中是否存在这些div,控制台中会出现错误。

示例:如果在product.html页面中没有carousel,那么在console中就会出现关于缺少带有carousel类的<div>的错误。

希望你能说清楚。

你能帮我理解一下吗?

Here the example on product page

EN

回答 1

Stack Overflow用户

发布于 2019-01-29 22:29:47

你可以通过一些防御性的编码来解决它。每个模块都依赖于某个DOM节点,因此应该在实例化模块之前查询元素。像这样:

代码语言:javascript
复制
// product.js

import Vue from 'vue/dist/vue';

export default function() {
  var vueRoot = document.getElementById('c-product')
  if (!vueRoot) return;  // element does not exist, so we return before instantiating

  var app = new Vue({
    el: '#c-product',
    data: {
      counter: 0,
    },
    methods: {
      addToCart: function() {
        this.counter++;
      },
      removeFromCart: function() {
        this.counter--;
      }
    }
  });

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54422877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档