无法调用子窗口函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法调用子窗口函数相关的知识,希望对你有一定的参考价值。

我有这个Vue页面,它使用以下行打开一个子窗口;

this.presentation = window.open(
    this.$router.resolve({name:'presentation'}).href,
    'child window',
    'width=auto,height=auto'
);

这就像一个魅力,但现在我需要称它为方法。我试图像这样访问它们。 家长:

this.presentation.setPage(0);

儿童:

export default {
  name: 'Presentation',
  data() {
    return {
      page: null
    }
  },
  methods: {
    setPage(_page) {
      this.page = _page;
    }
  }

这会引发跟随错误。

TypeError: "this.presentation.setPage is not a function"

为什么我不能调用子方法?我怎样才能解决这个问题?

答案

首先,来自window.open() documentation

窗口

...名称不应包含空格。 ...

返回值:

表示新创建的窗口的Window对象。

你的this.presentation包含Window对象,而不是Vue对象。当然,它没有setPage()方法。

也许,类似的东西可以工作(在你的孩子组件中):

{
  mounted() {
    window.setPage = (page) => this.setPage(page);
  }
}

以上是关于无法调用子窗口函数的主要内容,如果未能解决你的问题,请参考以下文章

2-Qt关闭子窗口时执行特定代码

iphone - 将子视图添加到窗口后无法推送模态视图?

jquery 调用子窗口函数

JavaScript子窗口调用父窗口变量和函数的方法

如何从片段 KOTLIN 中调用意图 [重复]

js子窗口调用父窗口函数并传递对象给父窗口的方法