【发布时间】:2017-07-17 13:23:20
【问题描述】:
我的 Angular 4 应用程序中有一个类(接口),它有很多字段。
请注意,此类/接口的实例是 immutable(即成员永远不会被更改)。
例如
public interface IHaveALotOfFields {
field1: string;
//...
field500: string;
}
此接口是通过(提供单例/应用程序级别)服务提供的,该服务将类公开为成员。例如
@Injectable()
public class MyService {
public translations: ITranslationsProvider;
}
服务被注入到很多组件(几乎所有组件)中,并且经常在它们对应的模板中使用,也经常在组件的ts-部分中使用。例如。
@Component({
template: `Value: {{service.field500}}`
})
export class MyComponent {
public constructor(public service: MyService) {
}
private doSomething(): string {
return this.service.field1;
}
}
现在我的问题:
- 一个大类(有很多字段)会因为变化检测而使角度变慢吗?
- 有没有办法将一个类标记为“在更改检测时忽略我”? (类似于
ChangeDetectionStrategy.OnPush,但不是为每个组件指定这个,而是可以在类本身或服务成员上声明)
请注意,我不想将所有组件的更改检测策略更改为OnPush。
【问题讨论】:
-
接口只是类型检查的一种方式。它不会被注入......只有被 new 为类实例化的对象才会被注入。接口是类将遵守的契约。在界面中,您为合同分配属性和方法签名...服务具有 @Injectable 并且 Angular 负责这些实例化,以便您自动将事物连接在一起。
-
我知道。我有实现这个接口的具体类。
MyService基本上得到了一个实现注入接口的类的实例。 -
接口不只注入对象。这就是我希望能帮助你的。即你不能在界面上做新的......
标签: angular angular2-changedetection