【问题标题】:Convert String to Function in AngularJS在AngularJS中将字符串转换为函数
【发布时间】:2014-09-09 03:24:01
【问题描述】:

我正在尝试将字符串转换为控制器中的 AngularJS 服务方法调用。例如,我想将字符串“Contact.send(email)”转换为调用现有服务方法。我想用:

window["Contact"]["send"](email);

就像在这个线程中一样 - How to execute a JavaScript function when I have its name as a string - 但它说联系服务是未定义的,尽管被注入到控制器中。

【问题讨论】:

  • 你试过eval("contact.send(email)");之类的吗?
  • 我尽量避免使用 eval,如果可能的话。
  • 我以前也遇到过类似的问题。这可能有助于stackoverflow.com/questions/11666301/object-has-no-method-apply
  • 我们需要更多代码才能继续。如果将 Contact 注入到您的控制器中,您为什么要在 window 上引用它?请发布您的控制器和返回Contact 的服务。

标签: javascript angularjs angularjs-scope angularjs-service


【解决方案1】:

您可以使用 $scope.$eval 方法来评估当前 $scope 上下文中的表达式。

$scope.$eval("Contact.send(email)");

但您需要确保 Contact 对象在 $scope 对象上可用,否则它将不起作用。请参阅此https://code.angularjs.org/1.2.15/docs/api/ng/type/$rootScope.Scope 的范围文档

【讨论】:

  • 我如何传递 email 参数,除非将其分配到范围内?
  • 是的,所有内容都仅在范围的上下文中进行评估。如果需要传递电子邮件参数,请将其添加到范围或使用电子邮件,例如send('mymail@test.com')
【解决方案2】:

您需要使用 $injector 从字符串中获取服务:

$injector.get('Contact')['send'](email);

【讨论】:

    猜你喜欢
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2017-03-11
    • 1970-01-01
    • 2018-11-24
    相关资源
    最近更新 更多