Как сохранить значение json в переменной при подписке? - PullRequest
0 голосов
/ 15 января 2019

Я получаю данные json по http-вызову и подписываюсь как: -

this.localService.getdata('url').subscribe(
function (success) {
    this.dataa = success;
    this.dataa2 = success;
}
);

ссылка на стек: https://stackblitz.com/edit/angular-stackblitz-json-xr7ny8?file=src/app/app.component.ts

1) data.json значение присваивается переменной dataa2 изменяется и когда метод get2() называется dataa2 значение меняется. Одновременно для переменной test2.

2) Как мне сохранить data.json в переменной (например, dataa2), не меняя ее значение в данной ситуации.

3) Почему я не могу сохранить успех в двух переменных без изменения их значений. Как
хранить данные об успехе в двух переменных, не влияя друг на друга. Я Нужно каждый раз подписываться на получение копии данных JSON?

data.json

{
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
}

.html

<button type ="button" (click)="get()">tset</button>
<br/>
<br/>
<br/>
<button type ="button" (click)="get2()">tset2</button>

.ts

import { data } from './test';

export class AppComponent implements OnInit {
  name = 'Angular';
  dataa:any;
  dataa2:any;

  test ={
    'id':'abc'
  }

  test1:any;
  test2:any;
  constructor() {
  }

     ngOnInit() {
         this.dataa =  data;
        this.dataa2 =  data;

        this.test1 =  this.test;
         this.test2 =  this.test;
     }

  get(){
    this.dataa['userId'] = 2;
     this.dataa['id'] = 2;

      this.test1['id'] = 'I am changed';
  }


  get2(){
    console.log(JSON.stringify(this.dataa));
      console.log(JSON.stringify(this.dataa2));
  // should be===>  this.dataa2 =  {
   //           "userId": 1,
   //            "id": 1,
   //          "title": "delectus aut autem",
   //        "completed": false
   //           }
      console.log(JSON.stringify(this.test1));
      console.log(JSON.stringify(this.test2));
  }
}

1 Ответ

0 голосов
/ 16 января 2019

При назначении значения переменной в javascript переменная сохраняет свою собственную копию этого значения. Это не совсем так, когда вы назначаете объект переменной.

Если вы назначите один и тот же объект 2-мя переменным, любые изменения свойств объекта будут видны всем переменным, которые ссылаются на этот объект.

Способ создания копии объекта, где свойствами можно управлять отдельно, будет выглядеть следующим образом:

this.dataa2 = Object.assign({}, this.dataa);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...