1

初心者を助けてください。私は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。したがって、作成された新しい各オブジェクトには、最後に編集したオブジェクトのQuoteTimesandがあります。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)
            });               
    };

なぜこれが機能するのか誰でも説明できますか?

4

1 に答える 1