美文网首页微信小程序开发者微信小程序前端之美-VueJs
如何在mpvue中正确的引用小程序的原生自定义组件

如何在mpvue中正确的引用小程序的原生自定义组件

作者: 一斤代码 | 来源:发表于2018-08-21 23:24 被阅读9次

最近,很多人给我留言,问我说怎么在mpvue项目中引入小程序原生框架中的自定义组件

有这种需求,是非常正常的一件事情。因为在实际开发中,我们通常希望使用已有的开源组件库来进行开发,这些开源组件库大多是基于原生自定义组件的方式写成,比如目前比较流行的Vant Weapp、iView Weapp等等。所以,在mpvue项目中如何引入并使用这些自定义组件,就成了必须了解的一个问题。

有些朋友在自己尝试的过程中遇到了挺多的问题,那就让我来告诉你们经过我实测后认为的正确使用方式吧。

步骤一:生成你的mpvue工程

通过vue-cli命令,我们先生成一个全新的mpvue工程代码:

vue init mpvue/mpvue-quickstart my-project

然后进入该工程目录,通过npm安装依赖:

cd my-project
npm install

步骤二:下载小程序组件库

小程序的组件库有挺多,我们这里选用iVew Weapp作为示例。你可以直接去github把iView Weapp的代码下载下来,也可以用过npm来下载:

npm i iview-weapp

下载完成后,到它的目录中寻找名为dist的目录,这里面存放的就是iView Weapp原生小程序自定义组件代码。

步骤三:将组件库复制到工程的static目录下

你可以将上面提到的整个dist目录复制到你的mpvue工程下的static目录下(记得一定要是static目录,否则这些代码会被mpvue编译器错误的进行处理),然后给这个dist目录改个名字,比如叫iview。

步骤四:为需要使用自定义组件的Page进行配置

我们知道,原生小程序开发中,我们如果要在Page中使用自定义的组件,则需要在该Page对应的.json配置文件中配置要使用的自定义组件。在mpvue中,我们也需要做等价的配置。

比如,现在我要在src/pages/index/index.vue中使用iView中的i-button组件,那么就先要在src/pages/index/main.json(如果没有该文件,则新建一个)中进行如下配置:

{
  "usingComponents": {
    "i-button": "../../../static/iview/button/index"
  }
}

步骤五:在Page中使用自定义组件

经过上一步的配置,我们就可以开始在src/pages/index/index.vue中使用这个i-button组件了,就像这样:

<template>
  <div class="container">
    <i-button type="primary" @click="bindViewTap">这是一个按钮</i-button>
  </div>
</template>

运行这个小程序,能看到如下的样子:

怎么样?很简单吧!快试试吧。

相关文章

网友评论

  • Oo莫莫oO:vue init mpvue/mpvue-quickstart my-project
    运行提示vue不是不是内部或外部命令,也不是可运行的程序
    或批处理文件。加了PATH,也不管用,怎么回事?
    一斤代码:@Oo莫莫oO 确保是全局安装的么?直接命令行输入vue --version看能输出正确的版本号。如果不行的话,最好重新安装
    Oo莫莫oO:@一斤代码 安装了啊
    一斤代码:你安装vue-cli了没有?
  • 35fe0c22a6ee:整了半天 ,一直报错。终于看到全面的教程了,才把iview引入进来,,,真的好不容易啊:sob:
  • telami:大佬,看了你这个系列的文章,这回vue也搞清楚很多了,太感谢了✿✿ヽ(°▽°)ノ✿
  • 闲不住的李先森:按照你写的,报这个错误: Component is not found in path "static/iview/button/index"。
    main.json 中代码:"usingComponents": {
    "i-button": "../../static/iview/button/index"
    }
    iview 的目录放在了static/。
    请大神指导
    一斤代码:看下你的项目build出来的dist目录结构,按照这里的结构,来调整一下"../../static/iview/button/index"这里的路径。
  • 我爱喝可乐123:大神我把你的文章从头看到尾,瞬间对mpvue理解深刻了,您之前的教程5中说的v-html现在已经支持了
    我爱喝可乐123:@一斤代码 我做了个测试发现支持了
    一斤代码:是嘛,v-html已经支持了么?看官方文档好像还是说没支持呢
  • 笙歌桃花源:mpvue 中 iView Weapp要循环data里面的内容 index.vue中咋写代码
    一斤代码:@笙歌桃花源 最好把你的相关代码贴出来看看吧
    笙歌桃花源:@一斤代码 我试过了 不好使啊
    一斤代码:用vue的v-for语法
  • Scarlett陈:请问,如果我对axios简单封装了一下,然后就成了一个api.js,在这个js里面需要用到toast组件,我该怎么引入进来呀?
    一斤代码:在你的api.js里引入static/iview/base/index,然后必须在每个页面的main.json配置文件中配置:
    {
    "usingComponents": {
    "i-toast": "../../../static/iview/toast/index"
    }
    }

    因为目前看来没有办法对小程序自定义组件做全局引入。。。
  • Scarlett陈:膜拜大神
    Scarlett陈:@一斤代码 :corn:
  • b1977d77f557:引入组件后子在小程序里编译预览的时候会报es6的语法错误,这个有办法解决吗
    一斤代码:@候鸟与暖风 直接找到你要覆盖的样式,然后编写同名样式进行覆盖,可能你要使用!important来提升你样式的优先级
    候鸟与暖风:@一斤代码 如何修改iview组件的样式,不修改源码,直接覆盖
    一斤代码:没遇到过。你是没开es6转es5的功能么?
  • 尐尐星辰:这样确实可以引入一般的原生组件,
    但引入toast 这样需要js 主动调用的 就会出问题,不知道有没有碰到过呢?
    重现步骤:
    ```
    <template>
    <div class="container">
    <i-button type="ghost" @click="handleText">只显示文本</i-button>
    <i-toast id="toast"/>
    </div>
    </template>

    <script>
    const {$Toast} = require('../../../static/iview/base/index');
    console.info($Toast);
    export default {
    data() {
    return {}
    },
    methods: {
    handleText() {
    $Toast({content: '这是文本提示'});
    }
    },
    created() {
    }
    }
    </script>

    <style scoped>
    </style>

    ```

    会有如下错误:
    无法找到对应的组件,请按文档说明使用组件

    Cannot read property 'handleShow' of null; [Component] Event Handler Error @ pages/index/main#bound handleProxy
    TypeError: Cannot read property 'handleShow' of null

    const componentCtx = ctx.selectComponent(selector);
    if (!componentCtx) {
    console.error('无法找到对应的组件,请按文档说明使用组件');
    return null;
    }

    selectComponent 没有获取到东西

    请帮看一下这个问题,非常感谢
    一斤代码:我试了一下是可以用的,不会报错。你是不是忘记在main.json里配置toast组件了?

    {
    "usingComponents": {
    "i-toast": "../../../static/iview/toast/index"
    }
    }
  • 34cb58e57d35:正缺第三方UI的用法,谢谢!
  • 嗯2018:赞一个
  • 子武不是字母:感谢解决我的问题,{
    "usingComponents": {
    "i-button": "../../../static/iview/button/index"
    }
    }
    要放在main.json,请问能在main.js这样写吗export default {
    config: {
    "usingComponents": {
    "i-button": "../../../static/iview/button/index"
    }
    }
    }
    千里荷花香:http://mpvue.com/build/mpvue-loader/ 官网这个网页里边写了,版本不同,用法不一样
    bg6:是不是只能通过添加新的json文件配置每个页面了,config我试着也不好使了,src目录下有个app.json是不是就是说明了这个
    一斤代码:放到main.js里export这种方式,以前的版本是可以的,现在最新的版本的mpvue我测试了下好像不行了

本文标题:如何在mpvue中正确的引用小程序的原生自定义组件

本文链接:https://www.haomeiwen.com/subject/mhusiftx.html