收藏
回答

小程序自定义组件内 怎么调用外部的方法

比如 我A页面 里引入了一个自定义组件。在这个自定义组件里怎么调用A页面的方法。


最后一次编辑于  2018-01-31  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏关注问题回答

10 个回答

  • Yang
    Yang
    2018-01-31

    //导入模块:组件A

    const a= require('组件/模板路径')

    //合并导入模块

    const libs = Object.assign({}, a)


    Page(Object.assign({}, libs, {


    .............page内原始属性、函数的写法、定义不变................


    1、页面调用组件内的方法:

    onLoad: function (options) {

    var that = this

    //加载列表(loadList是组件内的方法,通过module.exports暴露出来

    that.loadList()

    }


    2、组件内调用页面的setData,为某数据源赋值

    function setItemState() {

    var that = this

    that.setData({

    'item.state': true

    })

    }


    3、组件内调用页面的某方法

    //先在page内定义addItem方法

    addItem: function () {

    ......................................

    },


    //然后在组件内调用addItem

    //添加项

    function doAddItem() {

    var that = this

    //调用page内定义的addItem方法

    that.addItem()

    }))


    上面的写法是先把当前页面用到的组件合并,然后再合并到page,如果只有一个组件/模板,也可以写成下面这样:

    //导入模块:组件A

    const a= require('组件/模板路径')


    Page(Object.assign({}, a, {


    .............page内原始属性、函数的写法、定义不变................

    -----------调用方法同上


    }))


    2018-01-31
    赞同 11
    回复
  • 仙ღ₅₂₀¹³¹⁴
    仙ღ₅₂₀¹³¹⁴
    2018-01-31

    A页面把某个方法 当变量传进去。这样可以吗?

    2018-01-31
    赞同
    回复
  • 永恒君
    永恒君
    2018-01-31

    一般是子级触发,也就是 triggerEvent,然后父级监听

    2018-01-31
    赞同
    回复 1
    • Fstar 、🎶
      Fstar 、🎶
      2018-07-26

      我在子级里出发了triggerEvent() 请问在父级如何监听?

      2018-07-26
      赞同
      回复
  • Yang
    Yang
    2018-01-31

    用Object.assign将组件和A页面合并,这样在A页面可以访问组件暴露的属性、方法,在组件内也可以访问A页面的属性、方法,注意使用this和that区分引用主体

    2018-01-31
    赞同
    回复
  • 永恒君
    永恒君
    2018-01-31

    @Yang,没懂求大佬指教,如何合并?

    2018-01-31
    赞同
    回复
  • 永恒君
    永恒君
    2018-01-31

    噢明白了,组件方法通过 module.exports 外放给父级,父级的 this 传给组件因此可以调用父级方法,很棒。

    那只剩下一个问题了,父级运行组件方法后,如何让组件 setData。

    2018-01-31
    赞同
    回复
  • 仙ღ₅₂₀¹³¹⁴
    仙ღ₅₂₀¹³¹⁴
    2018-01-31

    试过自定义组件内点击事件的方法暴露到组件上,点击后调用A页面内的方法可行。

    2018-01-31
    赞同
    回复 1
    • Fstar 、🎶
      Fstar 、🎶
      2018-07-26

      请问下具体怎么暴露?然后怎么调用?

      2018-07-26
      赞同
      回复
  • 仙ღ₅₂₀¹³¹⁴
    仙ღ₅₂₀¹³¹⁴
    2018-01-31

    感谢楼上大神们的解答。

    2018-01-31
    赞同
    回复