2016-04-02 9 views
0

私はAngular 2 betaとTypescript("gulp-typescript": "~2.12.1",)を使用しています。typescript長さが新しい配列

私は<div qz-badge num-stars="3" class="qz-badge"></div>

import {Component, Input, ElementRef} from 'angular2/core'; 
import {CORE_DIRECTIVES} from 'angular2/common'; 

@Component({ 
    selector: '[qz-badge]', 
    directives: [CORE_DIRECTIVES], 
    template: ` 
    <div class="stars"> 
    </div> 
    ` 
}) 
export class Badge { 
    @Input('num-stars') numStars: number; 

    constructor() { 
    console.log(new Array(3)); 
    } 
    ngOnInit() { 
    let num = this.numStars; 
    console.log(num); 

    console.log('--------'); 
    this.stars = new Array(num); 
    console.log(this.stars); 
    console.log(this.stars.length); 

    num = 3; 
    console.log('--------'); 
    this.stars = new Array(num); 
    console.log(this.stars); 
    console.log(this.stars.length); 
    } 
} 

のためのコンポーネントを書いていますこれは仕様で..

 
3 
-------- 
["3"] 
1 
-------- 
[] 
3 

をリードし、

構文

[element0, element1, ..., elementN] 
new Array(element0, element1[, ...[, elementN]]) 
new Array(arrayLength) 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

長さは3であるべきだと思います。 これはバグですか、いくつかの正しい理由がありますか?

+0

'numStars'は数字として定義されていますが、' console.log(this.numStars + 1) 'は31で、4ではなく' ParseInt'できませんでした。 'let num = + this.numStars;'は最終的に3行の配列を導いた。それは奇妙だ。 – Kennyhyun

答えて

2

実際にはバグではなく、簡単に動作します。すべて@Input()は文字列として渡されます。 Rob Wormaldさんのこの州の状態はissueです。 TSで

タイプ純粋にコンパイル時です

を構築だからあなたはあなたがあなたの入力のタイプとしてnumberを指定した場合でも、実行時に数が、文字列を持っていません。したがって、parseIntを使用してキャストできます。

// this.numStars is a string, not a number 
let num = parseInt(this.numStars); 

これで正常に動作します。

あなたのケースが機能しているplnkrです。

編集

私はあなたのコードで何かを逃しました。バインディングなし(括弧なし)で値を渡すので、評価されません。生の文字列です。

上記の答えはまだ有効ですが、あなたのケースで

[num-stars]="3" 

を結合して値を渡すことによって、はるかに簡単であるここで別のplnkrがparseIntはなししかし、バインディングを使用しています。

+0

ありがとう、私はAngularがその場合に文字列として渡すことができることを理解しました。私はバグではないことに同意します。私の場合、私の場合、 'error 'のために' parseInt'できませんでした。TS2345:' number '型の引数は' string '型のパラメータには署名できません。 'let num = + this.numStars;' worked 。むしろ 'numStars'を' string'ではなく 'any'として定義します。 – Kennyhyun