Angular, как изменить поле компонента в другом методе компонента - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь изменить поля моего компонента в другом компоненте, но значения не изменились. Пример Я создал компонент 1 с полем A в компоненте 2 Я создал метод расчета с параметром A Я делаю некоторые вычисления для параметра A, но в моем компоненте 1 после вычисления метода переменная A не изменяется.

export class Component1{
 A : number = 0;

 calculateA() {
  Component2.calculateA(this.A);
  // variable A is not changed
}

}

export class Component2{
 static calculateA(A : number) {
  A = 5;
}

Почему значение не изменилось?

Ответы [ 2 ]

1 голос
/ 06 октября 2019

Числовые параметры - это объект-значение в JavaScript, это означает, что значение передается, и изменение параметра в функции не влияет на переменную источника, которая использовалась для параметра.

let x = 5;

function func(val) {
  val = 10;
}

func(x);

console.log(x);

Если вы передаете параметр по объекту, ваша функция может изменить значение параметра, но это плохая практика программирования.

let x = { prop: 5 };

function func(val) {
  val.prop = 10;
}

func(x);

console.log(x);

Читайте о значениях по сравнению с эталонными объектами.

При том, что вы, очевидно, очень плохо знакомы с Angular, вы еще не готовы изучать Angular, вам нужно сначала изучить RxJs. Вернитесь к изучению Angular, как только вы поймете RxJs. Если вы не знаете, что такое наблюдаемый, субъектный или поведенческий субъект, вам следует изучать реактивное программирование, а не Angular.

1 голос
/ 06 октября 2019

Имейте в виду, что это неправильный способ связи между компонентами в угловом положении. Я бы порекомендовал вам воспользоваться услугами. Вы можете прочитать больше об этом здесь .

В вашей задаче вы должны вернуть значение A из компонента 2.

 static calculateA(A : number) {
  A = 5;
  return A;
}

Теперь, чтобы присвоить это значение Aв component1 сделайте это.


export class Component1{
 A : number = 0;
 calculateA() {
 this.A = Component2.calculateA(this.A);
  // variable A is not changed
}
}

Ваш код не работает, потому что вы передаете value, а не reference. Если вы используете примитивные типы данных, то они будут переданы по значению, иначе будет передана ссылка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...