sách gpt4 ai đã đi

ember.js - Ember 将服务注入(inject) Ember 实用程序

In lại 作者:行者123 更新时间:2023-12-02 05:40:55 30 4
mua khóa gpt4 Nike

我知道 Ember 有一个记录器,但我想创建自己的用于学习目的。我有一个名为 logger 的服务,我希望能够在任何地方使用这个服务。将此服务注入(inject)到组件、 Controller 等中没有问题...我无法弄清楚如何将此服务注入(inject)到我创建的实用程序中,而无需通过 create 函数传递它。我不想在创建实用程序的任何地方都传递我的记录器。当我尝试将其注入(inject)对象时,它提示不在容器中。最好的方法是什么?

1 Câu trả lời

好的,了解 Ember.inject.service Thực ra做什么 很重要!它就像一个较短的版本:

myService: Ember.computed({
get() {
return Ember.getOwner(this).lookup('service:myService);
}
}),

那么这个 getOwner 是什么?它为您提供对象的所有者。您的大多数对象(如模型、 Controller 、组件、 View 等)都是由依赖注入(inject) (DI) 容器创建的。要使类在 DI 容器上可用,它必须是 registered .

您的默认类(如 Controller 、路由、 View )由解析器自动注册。注册后可以inject当它们被容器创建时,它们会自动进入其他类。所有者也被注入(inject)到由容器创建的所有实例中。

因为容器本身是私有(private)的,所以这些公共(public) API 在应用程序上。 getOwner 也会返回应用程序。

如果您想手动查找容器上的实例,您可以使用 lookup .

对于您的实用程序类,您可能使用普通的 .create() 来获取对象。这当然不会自动将其耦合到您的应用程序,因此所有者不可用。自动注入(inject)也不起作用。

Bạn có thể sử dụng ownerInjection 手动注入(inject)所有者。 :

myClass.create(Ember.getOwner(this).ownerInjection(), {...});

Sau đó Ember.inject.service 将起作用,因为 getOwner 将返回注入(inject)的所有者。

您可以做的另一件事是在容器上注册实用程序对象,然后查找它们。然后自动注入(inject)所有者。

关于ember.js - Ember 将服务注入(inject) Ember 实用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37843461/

30 4 0
Bài viết được đề xuất: Nativescript 2.2 异常
Bài viết được đề xuất: sql - 将两个sql列合并为一个列
Bài viết được đề xuất: Vim:如何在命令模式下向左移动一个单词
Bài viết được đề xuất: SQL Server 2008 - 选择查询特定项目
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com