当前位置: 首页 > 知识库问答 >
问题:

Angular:将函数传递给对象内部的服务

魏鸿哲
2023-03-14

我有一个组件,我在其中传递我想要在模态中显示的内容,如下所示:

  openConfirmModal() {
    this.service.openmodal(
      {
        buttons: [ {name: 'Close'} ]
      }
    );
  }

模态服务如下所示:

  openmodal(input: String) {
    const dialogRef = this.dialog.open(popupComponent, {
      data: new ModalConfirmData({
        buttons: Object.values(data)[0]
      })
    });
  }

在我的popupComponent我有:

export class ModalPopupData {
  actions: Array<Object>;

  constructor(input?) {
    if (input) {
      this.buttons = input.buttons;
    }
  }
}

现在一切都很好,但是我现在想做的是将一个函数传递给我的服务,以便它使用它。像这样的事情,但我不知道怎么做:

{
  function: (modalComponent) => {
    modalComponent.close();
  }
}

共有3个答案

石正信
2023-03-14

您可以使用简单的javascript/typescript来解决这个问题,只需使用回调方法。

您的服务功能将如下所示:

serviceFunction(callback?) {
  const cb = callback || (() => { });
  // do your services thing
  return cb();
} 

因此,当您调用它时,只需使用您想要使用的回调函数调用serviceFunction

考虑到您的组件中有一个this.close()方法,调用将如下所示:

myService.serviceFunction(this.close);

茹高义
2023-03-14

您的回调函数希望将一个modalComponent作为参数,但您的html在(单击)=“act.callback”中没有做任何排序。

在您当前的代码中,您正在构造一个基本上如下所示的方法:

var myCallback = function(modalComponent) {
  modalComponent.close();
}
// ...
var someObj = {
  name: "Close",
  callback: myCallback
}

所以称之为,最终需要做些什么:

// ...
var modalComp = getComponent(); // however it gets hold of a modalComponent
someObj.callback(modalComp);

需要为该方法提供一个modalComponent来处理,但是在调用它时,您没有在当前代码中为它提供一个。

因此,您当前对回调的调用需要提供您想要关闭的模式作为输入(类似于@ConnorsFan的注释,假设是对该模式的相关引用),或者您将方法更改为已经知道该模式。

var myModal = ...;
var myObj = {
  name: "Close",
  callback: () => { myModal.close(); }
}

现在用法看起来就像这样,因为没有输入参数:

myObj.callback();

匿名函数对于厚颜无耻地利用调用方作用域中不存在的资源非常有用。

丁英韶
2023-03-14

就像按钮一样,您可以将方法/回调传递给服务,然后从服务内部调用它们,例如。

openConfirmModal() {
  this.service.openmodal({
    buttons: [ {name: 'Close'} ],
    methods: {
      onClose: () => {/** your function body goes here */},
      onSubmit: () => {/** your function body goes here*/}
      .
      .
      .
    }
  });
}

然后在你的服务中,你可以随时给他们打电话。

选中此复选框并单击

 类似资料:
  • 我创建了一个Author对象,用于构造函数的方法签名:public Book但是,我所做的赋值要求将Author(实例变量)更改为。当然,现在我以前的构造函数不行了。这是密码 如果我上传的方式不令人满意,我对任何不便表示歉意。我还没有学会使用堆栈溢出。 谢谢!

  • 问题内容: 我正在尝试使用Luaj + Java构建控制器。我有以下java类 以及控制器的以下lua脚本: 理想情况下,我想定义一个控制器(用lua编写),在其中我将保留程序的所有逻辑,并且我希望将该控制器的API公开给我的Java代码。我正在尝试使用以下方法: 我无法将对象传递给LuaValue。如何将Java对象传递给lua脚本? PS:通常,在使用Java和嵌入式脚本时,人们会将功能捆绑在

  • 问题内容: 这是我的基本功能: 此功能能够连接并在我的数据库上执行查询… 我想创建相同的功能,但更通用。…前一个仅用于一个表(),新表必须能够接受查询的参数作为输入,以及将在其中执行查询的类类型。这将允许我仅使用一行来执行查询。 应该是这样的: 您发现我不知道如何“通用”代码… 我希望已经清楚了… PS 应该是DB()中表的类的代表。 谢谢。 问题答案: 如果您打算返回结果集,请使用:

  • 我试图使一个用户类和使用类来处理登录,但从某种原因我的用户类构造函数是读取我的mysqli对象作为一个字符串 这是我的密码 Class.php mysql.php checklogin.php 它给了我这个错误 可捕获的致命错误:在第13行的C:\wamp\www\class.php中,类mysqli的对象无法转换为字符串 我要把头发拔出来了,有什么想法吗?

  • 问题内容: 我在php中有对象,每个对象代表一个“项目”以及与之相关的所有信息。 当用户浏览页面时,这些对象应传递给javascript。理想情况下,镜像相同的结构,因此我可以使用Raphael在我的网站上将每个项目及其信息显示为单独的形状。 但是,如何将对象从php转换为javascript? 问题答案: 您可以将PHP对象转换为数组,然后使用JSON函数对其进行编码。之后,从JavaScrip

  • 我有以下Powershell代码: 我应该如何声明可以传递给函数的局部变量。我的局部变量$file被填充,但当我将其作为其他函数的参数时,它就像它超出了范围。 我读了关于scopes的文章,但没能弄明白。 当前我收到错误: ini文件:D:\Projects\scripts\Configs\HBOX。ini测试路径:无法将参数绑定到参数“Path”,因为它是空字符串。在D:\项目\自由职业者。co