初心者を助けてください。私はngStorage
いくつかのグローバル変数を保存するために使用しています:
//Global Controller
saveGlobalSettings = () => {
this.$sessionStorage.QuoteTimes = this.quoteTimes;
this.$sessionStorage.QuoteTypes = this.quoteTypes;
};
別のコントローラーで別のメソッドを使用して、一部のグローバル変数をプロパティとして使用するオブジェクトを作成しています。
// Create Controller
addChannel = (channel) => {
channel.QuotingChannelType = channel.QuotingChannelId;
console.log(this.$sessionStorage.QuoteTimes);
channel.QuoteTypes = this.$sessionStorage.QuoteTypes;
channel.QuoteTimes = this.$sessionStorage.QuoteTimes;
if (!this.myChannels) { this.myChannels = []; }
this.myChannels.push(channel);
};
次に、ブラウザでng-repeat
オブジェクトを表示するために使用しています。クリックすると、オブジェクトがメソッドmyChannels
に渡されます。openDialog()
openPreferencesDialog = (channel) => {
var options: ng.ui.bootstrap.IModalSettings = {
templateUrl: 'app/form/templates/editChannelPreferences.html',
controller: 'EditDialogController',
controllerAs: '$ctrl',
resolve: {
channel: () => channel
}
};
this.$uibModal.open(options).result
.then(updatedChannel => console.log(updatedChannel));
};
ダイアログは期待どおりに開きますが、変更を加えると、QuoteTimes
とのQuoteTypes
配列が更新されます$sessionStorage
( から見た場合console.log
) addChannel
。したがって、作成された新しい各オブジェクトには、最後に編集したオブジェクトのQuoteTimes
andがあります。QuoteTypes
私は完全に困惑しています。私の最善の推測は、ある種のスコープチェーンの問題ですか? 私が間違っていることは何か分かりますか?
JSON.parse(JSON.stringify(obj));
更新:次のように使用して、期待どおりに機能させることができました。
openPreferencesDialog = (obj, index) => {
var channel = JSON.parse(JSON.stringify(obj));
var options: ng.ui.bootstrap.IModalSettings = {
templateUrl: 'app/form/templates/editChannelPreferences.html',
controller: 'EditDialogController',
controllerAs: '$ctrl',
resolve: {
channel: () => channel
}
};
this.$uibModal.open(options).result
.then(updatedChannel =>
{
console.log(updatedChannel);
this.$sessionStorage.myChannels[index].QuoteTimes = updatedChannel.QuoteTimes;
this.$sessionStorage.myChannels[index].QuoteTypes = updatedChannel.QuoteTypes;
console.log(this.$sessionStorage.myChannels)
});
};
なぜこれが機能するのか誰でも説明できますか?