newbを助けてください。アイムAngularJS 1.6.1、TypeScript、UI Bootstrap Modal:セッション記憶域に格納されているグローバル変数がモーダルによって更新されているのはなぜですか?
// 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);
};
:私はプロパティとしてグローバル変数の一部を使用するオブジェクトを作成するために、別のコントローラに別の方法を使用してい
//Global Controller
saveGlobalSettings =() => {
this.$sessionStorage.QuoteTimes = this.quoteTimes;
this.$sessionStorage.QuoteTypes = this.quoteTypes;
};
:私はいくつかのグローバル変数を格納するためにngStorage
を使用しています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));
};
予想通りダイアログが開きますが、私は変更を加えたとき、それはaddChannel
にconsole.log
から見た($sessionStorage
にQuoteTimes
とQuoteTypes
配列を更新しています)。したがって、作成された新しいオブジェクトには、最後に編集したオブジェクトのQuoteTimes
とQuoteTypes
があります。私は完全に困惑しています。私の最高の推測は、スコープチェーンの問題のいくつかの種類ですか?私が間違っていることは何か考えていますか?
UPDATE:次のように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)
});
};
この作品、なぜ誰も説明できますか?