javascript - 如何注册自定义Vue组件?

标签 javascript vue.js vuejs2 vue-component

我保证我已经阅读了我能找到的所有相关帖子,但我得到了任何明确的答案(据我所知,但我是 Vue 的新手)。

详细信息:

  • 我使用的是 Vue v2.5.15
  • 我们正在使用 webpack(我了解到这可能会影响我使用组件的方式)

我正在尝试使用this range slider component 。我尝试按照文档进行操作,但不断收到错误消息 [Vue warn]: Unknown custom element: <vue-slider> - did you register the component correctly? 。我已经尝试阅读文档和可能 20 个不同的帖子,但我仍然没有明白这一点。这基本上是我的 JS 文件中的内容:

<!-- HTML -->
<div id="app">
  <vue-slider
        v-model="sliderRange"
        :min="minPriceBase"
        :max="maxPriceBase"
  ></vue-slider>
</div>
// Javascript
import Vue from 'vue';
import VueSlider from 'vue-slider-component';
import 'vue-slider-component/theme/default.css';

export default {
  components: {
    VueSlider
  }
}

Vue.component('VueSlider', VueSlider);

var vm = new Vue({
  el: '#app',
  data: {},
  components: {
    VueSlider: window['vue-slider-component']
  }
});

我还通读了 Vue docs on components我不知道我做错了什么。如何正确注册我的组件?

更新:

我发现如果我使用:

components: {
  VueSlider
}

而不是:

components: {
  VueSlider: window['vue-slider-component']
}

然后我就不再收到上面提到的错误了。相反,我收到一条错误消息 [Vue warn]: Invalid prop: type check failed for prop "min". Expected Number, got Boolean 。但你认为这是进步吗?为什么需要`window['vue-slider-component']?

最佳答案

查看文档,我认为您尝试同时执行所有不同的导入变体

  new Vue({
    el: '#app',
    components: {
      VueSlider: window['vue-slider-component']
    }
  })

如果您通过脚本通过添加直接导入,这似乎是访问附加到窗口的组件的建议方式

<script src="./node_modules/vue-slider-component/dist/vue-slider-component.umd.min.js"></script>

(你没有这样做)

还有两种方法,可以使用全局安装组件

// main.js
import VueSlider from 'vue-slider-component'
import 'vue-slider-component/theme/default.css'

Vue.component('VueSlider', VueSlider)

这将使 vue-slider 可用于应用程序中的所有组件,因此您不必多次导入它。如果这样做,您就不必在本地定义它。最后第三个选项是仅在本地导入:

// App.vue
import VueSlider from 'vue-slider-component'
import 'vue-slider-component/theme/default.css'

export default {
  components: {
    VueSlider
  }
}

这将使 slider 组件仅可用于单个组件。根据您的情况,您可以决定选择选项 1:

import VueSlider from 'vue-slider-component'
Vue.component('VueSlider', VueSlider);

或选项 2:

import VueSlider from 'vue-slider-component'
import 'vue-slider-component/theme/default.css'

export default {
  components: {
    VueSlider
  }
}

顺便说一句,您现在看到的错误是您引用的 minPriceBase 不是数字,您必须在实例上设置该数据:

import VueSlider from 'vue-slider-component'
import 'vue-slider-component/theme/default.css'

export default {
  components: {
    VueSlider
  },
  data () {
    return {
      minPriceBase: 0,
      maxPricebase: 10
    }
  }
}

请注意,在您的代码中,您将导出粘贴到了 vue 实例之前,您不需要在那里导出任何内容,只需在 vue 实例上定义该组件即可:

import VueSlider from 'vue-slider-component'

var vm = new Vue({
  el: '#app',
  data: {},
  components: {
    VueSlider
  }
});

您应该能够在示例中摆脱它,它不会执行任何操作:

export default {
  components: {
    VueSlider
  }
}

关于javascript - 如何注册自定义Vue组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57612317/

相关文章:

javascript - MooTools if/then/else 切换基于 css 类的存在

validation - Uncaught Error : [vee-validate] No such validator '1234567' exists

vuejs2 - VueJs + Vuex + mapActions

javascript - npm run dev 产生 UnhandledPromiseRejectionWarning

vue.js - Vue 为什么在组件上未定义 Prop

javascript - 设置具有相同CSS类的两个元素的值

javascript - 在 Vuejs 中使用 async-await 等待函数内的赋值

javascript - Vue,单独的组件触发 'not a function' 消息

javascript - 滚动到可滚动父元素的子元素

vue.js - 使用 Vuetify 在 textField 中选择文本