angular.js:Typescript 类构造函数“这是未定义的”
Posted
技术标签:
【中文标题】angular.js:Typescript 类构造函数“这是未定义的”【英文标题】:angular.js: Typescript class constructor "this is undefined" 【发布时间】:2018-05-19 17:09:33 【问题描述】:我正在尝试创建一个简单的 TypeScript 类,但是当它被实例化时,我在构造函数中收到 this is undefined
错误。
类:
class MyClass
stuff: string;
constructor()
this.stuff = 'stuff';
app.config([MyClass]);
被编译成:
var MyClass = /** @class */ (function ()
function MyClass()
this.stuff = 'stuff';
return MyClass;
());
app_module_1.app.config([MyClass]);
为什么这不起作用?为什么this
未定义?根据我编写的示例和其他代码,这似乎是合适的语法。
我的代码的其余部分(有效):
export let app = angular.module('timeApp', [
uirouter
]);
class MainController
stuff: string;
constructor()
this.stuff = "TESTING";
app.controller('mainController', MainController);
【问题讨论】:
它不是未定义的。您在 app.Config 函数或问题中未显示的其他地方做了一些奇怪的事情。您显示的代码不会导致此错误,因为它没有实例化类 @AluanHaddad 这就是我如此困惑的原因。我唯一拥有的其他代码是另一个文件中的主控制器,与上面完全相同,除了不同的类名。而且效果很好。 @AluanHaddad 是的,我删除了用于测试的注射剂,因为由于this
错误,我们的路由类无法正常工作。
你需要使用一个函数。不是一堂课。 Angular 不会像使用服务注册那样使用注入器来实例化您的类,因为这不是它处理配置块的方式。 TypeScript 也没有建议您应该使用类,所以我不知道您为什么要这样编写代码。
说真的,看看 Anders Hejlsburg 在 typescript 上的演示,它可以在 Channel 9 上找到,只需谷歌它。网站上有一些关于课程的营销演讲,但那是因为在引入该语言时,es2015 尚未获得批准。 Es2015 类是 TypeScript 类的基础。更进一步,如果您认为 typescript 中的强类型需要使用类,您将编写糟糕的 typescript 代码。这将是绝对可怕和令人困惑的。在适当的地方使用类,例如它们对 Angular JS 控制器有意义。
【参考方案1】:
为什么这不起作用?
因为您使用的是app.config([MyClass]);
,Angular 会在没有new
的情况下调用它,因此this
将是未定义的
修复
不要使用带有角度config
的类。使用函数。
更多
new
:https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Operators/new
【讨论】:
以上是关于angular.js:Typescript 类构造函数“这是未定义的”的主要内容,如果未能解决你的问题,请参考以下文章
typescript Angular 4基本动画#angular #js
Sequelize Typescript Sequelize Typescript TypeError:没有'new'就不能调用类构造函数模型