2017-04-23 8 views
1

それは私を狂ってしまう。私は本当にシンプルな「問題」を持っていて、何時間もかかりましたが、何が起こっているのかまだ分かりません。非同期配列は何も使用していない?

親サービス(私はES6を使用しています)から継承する子サービスがあります。コンストラクタには、optionsという1つの引数があります。 optionsthis._defaultsに割り当てられます。

私はoptionsを私のオブジェクト(new Service(options))に渡す前に、私はoptionsにデータを入力します。それをシンプルに保つために、私の現在のoptionsのオブジェクトは、次のようになります。

const Types = { 
    standard: { 
    some: 'data' 
    }, 
    freeroll: { 
    some: 'data' 
    }, 
    mainevent: { 
    some: 'data' 
    }, 
    qualifier: { 
    some: 'data' 
    } 
}; 

angular.forEach(Types, (val, key) => { 
    options.types[key] = true; 
}); 

私はこのような範囲に私のサービスを割り当てる:

const options = { 
    types: [] 
} 

は今、私はこのように、種類の配列にいくつかのものを追加します。

$scope.service = new Service(options) 

サービスをコンソールで出力します。コンソールには_defaults.typesという値がArray(0)と表示されます。配列をクリックすると正しい値が表示されますが、スコープはそれを認識しません。

どのようにですか? Array(0)は、console.log()の時に配列に値が入力されていないのに後になったことを意味していますか?非同期関数のようにしますか?

Here is a plunk of my problem

答えて

2

問題は、typesが配列であり、プレーンオブジェクトのように扱っているということです。この2つの方法のいずれかを解決することができます。

まずだけオブジェクトにtypesを変更します。

const options = { 
    types: {} 
}; 

それとも、あなたは配列を必要とする場合、あなたは配列に項目を追加している方法を変更:

angular.forEach(Types, (val, key) => { 
    options.types.push({ 
     type: key, 
     value: val 
    }); 
}); 

注意これはちょうどであることオブジェクトを配列に変換する1つの方法として、最終的なデータ構造はあなた次第です。

+0

これは本当です。 jsonフィルタで内部的に使用されるJSON.stringifyの仕組みだけであることに注意してください。 – estus

+0

どうすればいいですか?それはとても簡単な間違いで、私はそれを見ませんでした。完全に意味がある、ありがとう。 – Fortuna

+0

問題ありません - コードが長すぎる(特にあなた自身の)コードを見ると、大カッコやブレースのような小さなキラーを見るのは難しいです – gonzofish

関連する問題