gpt4 book ai didi

javascript - 带有 typescript 的 AngularJS : this resolved differently in service and config constructor

转载 作者:行者123 更新时间:2023-11-30 12:11:04 24 4
gpt4 key购买 nike

我将 AngularJS 与 Typescript 和 DefinitelyTyped 的定义结合使用。

我这样定义我的服务和配置:

module MyModule {
export module Services {
export class MyService {
constructor() {
console.log(this); // this refers to service instance, as expected
}
}
}
}

module MyModule {
export module Configurations {
export class MyConfiguration {
constructor() {
console.log(this); // this refers to Window!?
}
}
}
}

然后像这样注册它们:

var app = angular.module('MyApp', ...);
app.config(MyModule.Configurations.MyConfiguration);
app.service('MyService', MyModule.Services.UserService);

这很好用,但我注意到 this 的解析方式不同:实例化服务时,控制台会按预期记录 [object Object],引用服务。但是在处理配置时,控制台会记录全局窗口对象 [object Window]

为什么?

最佳答案

  1. angular.config 需要传递函数,不是类,这里指的是窗口,这样就可以了。
  2. 您根本不需要在配置中访问它,在配置中您可以配置您的提供商等。

您的代码也可以这样简化:

module MyModule.Services {
export class MyService {
constructor() {
console.log(this); // this refers to service instance, as expected
}
}
}

module MyModule.Configurations {
export function myConfiguration(yourProvider1, yourProvider2) {
//config injectables, you don't need to access this at all
}
}

var app = angular.module('MyApp', []);
app.config(MyModule.Configurations.myConfiguration);
app.service('MyService', MyModule.Services.MyService);

如您所见,您不需要嵌套模块,顺便说一句,我建议使用新的命名空间语法:)

关于javascript - 带有 typescript 的 AngularJS : this resolved differently in service and config constructor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33787728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com