2016-07-12 107 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

相關問題