私は、別のコントローラーに渡す必要のあるオブジェクトを格納するAngularファクトリーを作成しました。工場は次のようになります:角度ファクトリーでの双方向バインディング
app.factory('SearchEngineConfigs', function() {
var configs = {
isInternational: false,
TripType: 1,
journeys: []
}
var _setInternational = function(val) {
configs.isInternational = val;
}
var _setTripType = function(val) {
configs.TripType = val;
}
var _setJourneys = function(journeys) {
configs.journeys = journeys;
}
var _getConfigs = function() {
return configs;
}
return {
setInternatioanl: _setInternational,
setTripType: _setTripType,
setJourneys: _setJourneys,
getConfigs: _getConfigs
}
});
私はこの工場を私のコントローラに注入しました。コントローラの1つでは、configsの工場の値を次のように設定しています。
これまでのところとても良いです。ここで何が起きているのかは、私が変更するたびにファクトリメソッドSearchEngineConfigs.setInternatioanl
を呼び出さずに$scope.searchEngine.isInternational
と言いましょう。この変更はまだ工場に反映されているため、最初のコントローラと同時にそのファクトリを使用している別のコントローラでこのプロパティを更新します。これを避けるにはどうすればいいですか?私は、明示的に対応するファクトリメソッドへの呼び出しを行うときに、ファクトリ内のオブジェクトの値を変更したいだけです。
あなたのソリューションがうまく機能し、これを保証する
一つの方法は、一貫性がデコレータ機能を使用することですでした!なぜあなたはapply関数を使い、最初の引数であるようにファクトリを渡したのですか? –
'this'キーワードが期待どおりに工場を参照し続けるようにします。また、 'argumentsCopy'配列が正しく展開されます。あなたの関数が 'this'を使用していた場合や、複数の入力引数を持っていた場合には、その差をもっと知ることができます。 –