这怎么能在 Angular 配置 class 的构造函数中未定义?
How can this be undefined in the constructor of an Angular config class?
我在网上找到了一些示例,人们在其中创建 TypeScript 配置 classes 并将它们传递给 Angular。当我尝试它时,我得到了一个奇怪的异常,即 this
未定义。仔细观察发现的其他实现,它们只使用构造函数,那么,这些示例实际上本质上是错误的和误导性的,还是我在定义 class?
时做错了什么?
我的代码:
class TestConfig {
constructor() {
console.log('TestThis =>');
console.log(this);
console.log('<= TestThis');
}
}
angular.module('todoList', [])
.config(TestConfig);
我的日志:
TestThis =>
undefined
<= TestThis
我想定义辅助函数并使用它们,以使构造函数中的配置更易于阅读。我现在正在使用静态辅助函数来做这件事,但我不清楚为什么当它不能正确地与 classes 一起工作时,为什么会有这么多人使用它。但我也看不出我的代码有任何问题。
我从中获得配置 class 想法的原始代码是由 gulp angular generator
顺便说一句生成的
配置函数不是 class,因此不应这样写。 Angular 在没有 new
的情况下调用它们,因此 this
将是 undefined
(或者,上帝帮助你,在非严格模式下 window
)。
在这里使用 class 没有任何意义,因为没有实例可保留。如果您想利用 $inject
,请使用 function/module 对:
function fn($foo) {
}
module fn { export var $inject = ['$foo']; }
或者直接写
fn['$inject'] = ['$foo'];
我最近更新了一个从以前版本的 gulp-angular-generator 生成的项目。我遇到了一些问题,这是其中之一。
我只是导出函数而不是 classes。这样我就知道我不能像 class.
那样使用 this
/* @ngInject */
export function Config(
$logProvider: ng.ILogProvider,
$httpProvider: ng.IHttpProvider,
$provide: ng.auto.IProvideService,
RestangularProvider: restangular.IProvider) {
/* ... */
}
另请注意,我正在使用 ngInject 属性。所以没有必要在任何地方输入 $inject = ['$foo'];
。
顺便说一句,我今天发现引用对于确保打字稿文件的正确顺序至关重要。它使用旧的排序方式工作,但现在生成器的做法略有不同,我的所有东西都因为缺少 /// <reference path="..." />
评论而损坏。
确保您的 index.module.ts 文件顶部有以下内容:
/// <reference path="index.config.ts" />
/// <reference path="index.route.ts" />
/// <reference path="index.run.ts" />
我在网上找到了一些示例,人们在其中创建 TypeScript 配置 classes 并将它们传递给 Angular。当我尝试它时,我得到了一个奇怪的异常,即 this
未定义。仔细观察发现的其他实现,它们只使用构造函数,那么,这些示例实际上本质上是错误的和误导性的,还是我在定义 class?
我的代码:
class TestConfig {
constructor() {
console.log('TestThis =>');
console.log(this);
console.log('<= TestThis');
}
}
angular.module('todoList', [])
.config(TestConfig);
我的日志:
TestThis =>
undefined
<= TestThis
我想定义辅助函数并使用它们,以使构造函数中的配置更易于阅读。我现在正在使用静态辅助函数来做这件事,但我不清楚为什么当它不能正确地与 classes 一起工作时,为什么会有这么多人使用它。但我也看不出我的代码有任何问题。
我从中获得配置 class 想法的原始代码是由 gulp angular generator
顺便说一句生成的配置函数不是 class,因此不应这样写。 Angular 在没有 new
的情况下调用它们,因此 this
将是 undefined
(或者,上帝帮助你,在非严格模式下 window
)。
在这里使用 class 没有任何意义,因为没有实例可保留。如果您想利用 $inject
,请使用 function/module 对:
function fn($foo) {
}
module fn { export var $inject = ['$foo']; }
或者直接写
fn['$inject'] = ['$foo'];
我最近更新了一个从以前版本的 gulp-angular-generator 生成的项目。我遇到了一些问题,这是其中之一。
我只是导出函数而不是 classes。这样我就知道我不能像 class.
那样使用this
/* @ngInject */
export function Config(
$logProvider: ng.ILogProvider,
$httpProvider: ng.IHttpProvider,
$provide: ng.auto.IProvideService,
RestangularProvider: restangular.IProvider) {
/* ... */
}
另请注意,我正在使用 ngInject 属性。所以没有必要在任何地方输入 $inject = ['$foo'];
。
顺便说一句,我今天发现引用对于确保打字稿文件的正确顺序至关重要。它使用旧的排序方式工作,但现在生成器的做法略有不同,我的所有东西都因为缺少 /// <reference path="..." />
评论而损坏。
确保您的 index.module.ts 文件顶部有以下内容:
/// <reference path="index.config.ts" />
/// <reference path="index.route.ts" />
/// <reference path="index.run.ts" />