2016-07-12 110 views
1

我已经开始使用此处找到的开发工具包的项目:https://github.com/datatypevoid/ng2-mean-webpack。一切似乎都完全正常工作,当我创建的参数属性的新类(正式打字文件在这里所看到:https://www.typescriptlang.org/docs/handbook/classes.html)除外,我在控制台中的错误消息说:Angular2类的构造函数错误:没有数字提供商

ORIGINAL EXCEPTION: No provider for Number! 

这里是我的类:

@Component({ 
    selector: 'grid-tile', 
    template: require('./grid-tile.component.html'), 
    styleUrls: [require('!style!css!sass!./grid-tile.component.scss')], 
    providers: [], 
    directives: [], 
    pipes: [] 
}) 
export class GridTile extends Tile { 
    constructor(private x:number, private y: number) { 
    super(); 
    } 
} 

而一个在这里是我如何创建实例:

var tile = new GridTile(3,4); 
tiles.push(tile); 

我真的很感激,发现此proble的解决方案随着我进一步发展。我遵循Angular2 Tour of Heroes教程和参数属性似乎工作正常,所以我想知道它是否与开发工具包有关或者只是我传递的东西..我完全是新的Angular2 ,所以这可能是我的错。谢谢您的帮助。

+0

为了记录在案,包笔者上市已被弃用,搬到这里:https://github.com/datatypevoid/vulgar –

回答

2

Angular 2使用MVC模式:用@Component装饰的类相当于Controller。这意味着:

  • ,如果你不使用 依赖注入(这会产生错误)无法提供的参数构造函数;

  • 类不应该被实例化,但必须在时间引导的 ,或通过路由器,或角将它作为一个 孩子通过指令来调用。

如果你仔细分析游英雄的,你会发现,你创建一个服务,这是一种可注射类:

@Injectable() 
export class HeroService { 
    ... 
    } 
} 

然后你注入它作为一个provider(在相同的组件或父代),并通过将其传递给组件的构造函数来实例化:

@Component({ 
    selector: 'my-app', 
    ... 
    providers: [HeroService] 
}) 
export class AppComponent implements OnInit { 
    ... 
    constructor(private heroService: HeroService) { } 
    ... 
} 

以这种方式,对注入的类的访问由组件和所有子组件继承。

在您的示例中,您有两个变量作为参数,并且会生成错误,因为它们不对应组件中的任何提供程序。

您可以阅读更多here

或者开始:http://victorsavkin.com/post/118372404541/the-core-concepts-of-angular-2

+0

谢谢!猜猜我在英雄之旅中忽略了这一点,现在它变得更有意义。问题解决了 :) – SimCity

相关问题