据我所知,一个类可以使用装饰器(例如<script>
$('#password, #password1').on('keyup change', function () {
if (!$('#password').val()) {
$('#message').html('');
}else if($('#password').val()<5){
$('#message').html('Password must be at least 5 digit!').css('color', 'red');
$('#submit').prop('disabled', false);
} else {
if ($('#password').val() == $('#password1').val()) {
$('#message').html('Password Match').css('color', 'green');
$('#submit').prop('disabled', false);
} else {
$('#message').html('Password not Match').css('color', 'red');
$('#submit').prop('disabled', true);
}
}
});
</script>
,@Injectable
)从Angular注入器注入依赖项。
因此,我认为@Component
装饰器是某种“徽章”,告诉Angular“ I(class)允许您注入我请求的依赖项”,我相信这是正确的。
但是官方文件中的这句话使我感到困惑:
@Injectable
@Injectable装饰器指示Angular DI系统用于创建一个或多个UserContextService实例。
据我所知,@Injectable()
export class UserContextService {}
装饰器与注入器创建类的实例无关。
我想念什么吗?
答案 0 :(得分:0)
足够有趣的是,关于此文档的文档是错误的。 @Injectable
实际上表示“我(服务)可以向我注入其他服务”。考虑一下称为Service2
的服务,该服务试图将Service1
注入构造函数:
// If you remove this, you will get an error
@Injectable()
export class Service2 {
constructor(private service: Service1) {
}
}
如注释中所述,删除@Injectable()
会引发错误。您可以使用StackBlitz I created进行尝试。组件不需要@Injectable()
即可向其中注入服务。
我发现了an issue where this was discussed,但似乎什么也没有。想想看,我看不起文档,却一直不正确地使用@Injectable()
。谢谢您提出这个问题。
这促使我更加深入地研究了文档引用的测试。它失败了,但不是由于文档说失败的原因。他们实际上进行了一项测试,以验证您可以注入没有具有装饰器的服务。我为好奇的here写了更多信息。