zhaiduting
zhaiduting
  • 发布:2020-06-19 10:23
  • 更新:2020-06-19 11:10
  • 阅读:1621

如何实现一个自定义的toast组件?

分类:uni-app

仿造uni-app自带的toast组件,希望使用自定义的函数显示或隐藏该组件,类似于下面这样

//显示自定义的 toast  
myToast.show({  
    icon: 'my-loading'  
})  

//隐藏自定义的 toast  
myToast.close()

希望这个组件在整个应用的生命周期中只加载一次就可以了,无需在每个页面额外添加标签 <my-toast></my-toast>。请问这样的自定义组件该如何实现?

uni.showToast() 就具备这样的功能,无需在每个页面额外添加标签

2020-06-19 10:23 负责人:无 分享
已邀请:
gftttrrtrt4

gftttrrtrt4 - s

除了h5端之外,现在实现不了

这是我写的可以兼容H5和APP的思路全局toast

现在我在项目中是这么写的:

每个页面都用一个根组件包裹:
page.vue

<root>  
页面内容  
</root>

root.vue中监听事件:

<view>  
  <toast></toast>  
  <slot></slot>  
</view>
    var pages = getCurrentPages()  
    var page = pages[pages.length - 1]  
    this.toastEventName = `toast_${page.route}`  
    uni.$on(this.toastEventName, this.toast)

main.js中创建方法:

Vue.prototype.$toast = (option) => {  
  var pages = getCurrentPages()  
  var page = pages[pages.length - 1]  
  let toastEventName = `toast_${page.route}`  
  uni.$emit(toastEventName, option)  
}

调用:
this.$toast()

  • zhaiduting (作者)

    感谢回答,希望在小程序里面实现这样的功能。为什么uni-app自带的 uni.showToast() 就可以在小程序里面直接使用呢?页面里面也不用额外添加<toast></toast>标签

    2020-06-19 11:14

  • gftttrrtrt4

    回复 zhaiduting: 这个需要看官方了,毕竟转成小程序的过程可能已经自动插入了,或者调用的是小程序自带的toastAPI

    2020-06-19 11:18

  • zhaiduting (作者)

    回复 gftttrrtrt4: 不知道vue的全局mixin能否达到这样的效果,或者直接操作节点元素?我查阅了 uni.createSelectorQuery() 的用法 https://uniapp.dcloud.io/api/ui/nodes-info 可是这东西似乎只能获取节点信息,没法动态创建或者修改节点

    2020-06-19 11:32

该问题目前已经被锁定, 无法添加新回复