powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
21 сообщений из 21, страница 1 из 1
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39447127
TsHeloWorlder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если объявить переменную как @Input для компонента, то Ангуляр будет отслеживать ее изменения и генерить OnChange у компонента. Тут все ок.

Но можно ли обойтись без необходимости выводить переменную в Input ?
Нужно, чтобы сам компонент мог прослушивать нужную ему глобальную переменную, а не зависить от того, что ему ее передадут через Input. Вдруг не ту передадут вообще, да и странно в этой задаче полагаться на другие компоненты.
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39447222
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlderВдруг не ту передадут вообще, да и странно в этой задаче полагаться на другие компоненты.
так и не сказал причину.
Почему вдруг и почему странно?
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39447308
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlderЕсли объявить переменную как @Input для компонента, то Ангуляр будет отслеживать ее изменения и генерить OnChange у компонента. Тут все ок.

Но можно ли обойтись без необходимости выводить переменную в Input ?
Нужно, чтобы сам компонент мог прослушивать нужную ему глобальную переменную, а не зависить от того, что ему ее передадут через Input. Вдруг не ту передадут вообще, да и странно в этой задаче полагаться на другие компоненты.

Input - это своего рода "коннектор" для передачи сущности из родительского компонента - в дочерний. На этом его роль заканчивается.

Для глобальных переменных обычно используют такие штуки как сервисы.
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39447343
TsHeloWorlder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомДля глобальных переменных обычно используют такие штуки как сервисы.

а прослушивать изменения этих глобальных переменных как ? ну вот изменилась там глобальная дата, как компоненту это отследить и перерисовать ?
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39447359
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlderнужную ему глобальную переменную
https://www.google.ru/search?q=angular global variable&ie=utf-8&oe=utf-8&channel=fs&gws_rd=cr,ssl&ei=vmkIWcKtLYGa6ASm5rOoBA
хотя бы пару ответов читали?
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39447361
TsHeloWorlder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39447362
TsHeloWorlder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Однако, каким образом мне поможет чтение того, как создавать глобальные переменных и прослушивание их изменений ? Мне то нужно отслеживать их изменения - создавать я их уже научился :)
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39447364
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlderкак создавать глобальные переменны
мы вроде решили что НЕ ПЕРЕМЕННЫЕ
Типа так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
export class SharedService {
  globalVar:string;
  globalVarUpdate:Observable<string>;
  globalVarObserver:Observer;

  constructor() {
    this.globalVarUpdate = Observable.create((observer:Observer) => {
      this.globalVarObserver = observer;
    });
  }

  updateGlobalVar(newValue:string) {
    this.globalVar = newValue;
    this.globalVarObserver.next(this.globalVar);
  }
}
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39447374
TsHeloWorlder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Это отличная мысль. Это и решает мою проблему. Т.е. используем не просто number а Observable.
Спасибо.
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39447434
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlderPetro123,

Это отличная мысль. Это и решает мою проблему. Т.е. используем не просто number а Observable.
Спасибо.

O_O
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39447602
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123TsHeloWorlderкак создавать глобальные переменны
мы вроде решили что НЕ ПЕРЕМЕННЫЕ
Типа так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
export class SharedService {
  globalVar:string;
  globalVarUpdate:Observable<string>;
  globalVarObserver:Observer;

  constructor() {
    this.globalVarUpdate = Observable.create((observer:Observer) => {
      this.globalVarObserver = observer;
    });
  }

  updateGlobalVar(newValue:string) {
    this.globalVar = newValue;
    this.globalVarObserver.next(this.globalVar);
  }
}



Боги...

Код: sql
1.
2.
3.
4.
5.
6.
export class SharedService {

  globalVar:string;

  constructor() {}
}



Вот этого достаточно. )))))
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39448484
TsHeloWorlder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,

С чего бы достаточно ? Задача была в том, чтобы отслеживать изменения переменной. Для этого нужен Observable. Как ваше решение решает эту задачу, как я могу сделать так, чтобы компонент перерисовал себя при изменении переменной ?
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39448516
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlderАгнец за бортом,


Для этого нужен Observable.

Ага. Два Observable. Второй - страхует.
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39448626
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39448810
TsHeloWorlder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,

Ссылка на какой-то гугловый запрос, где большинство ответов относятся к AngularJs, мне ничего не сказала. В общем задачу я уже решил, так, что не важно )
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39448896
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlderАгнец за бортом,

Ссылка на какой-то гугловый запрос, где большинство ответов относятся к AngularJs, мне ничего не сказала. В общем задачу я уже решил, так, что не важно )

Ну ты и привереда.

Вот спецово для тебя
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39448905
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlderАгнец за бортомДля глобальных переменных обычно используют такие штуки как сервисы.

а прослушивать изменения этих глобальных переменных как ? ну вот изменилась там глобальная дата, как компоненту это отследить и перерисовать ?

Ничем не отличается от первого ангуляра.
В ангуляре есть "правило точки", ссылку на которое я тебе и дал.
Оно гласит - если ты привязываешься к переменной не через точку, значит ты делаешь что-то не то.

Касаемо глобальных переменных.

Ты создаешь сервис (создаешь = описываешь), на уровне, скажем, всего приложения. Этот сервис содержит твою "глобальную переменную", как поле класса.

Код: javascript
1.
2.
3.
4.
5.
6.
@Injectable()
export class refService {    

    currentUser: user;

}



В конструкторе класса компонента ты инжектишь этот сервис и присваиваешь этот сервис полю класса компонента.


Код: javascript
1.
constructor(private refService: refService)



При такой записи - автоматом создается поле refService у твоего класса.

А далее в компоненте ты привязываешься не так:

{{currentUser}}

а так

{{refService.currentUser}}

И тогда - при изменении currentUser изменится и изображение твоего компонента.
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39449227
TsHeloWorlder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага. Так понятно. Хороший совет, не создавать полностью глобальных переменных, только в составе класса. В этом случае это тестируемо. В принципе это я и так знаю - глобальные переменные это зло. Также как и синглтоны. Их сложно тестировать, их сложно мокать.

Однако, хочу вас предупредить, что во втором Ангуляре этот подход не так хорошо работает. В Ангуляре 2 можно в любом компоненте заявить новый провайдер для класса, и тогда будет создан новый инстанс, а не использован глобальный. Что хуже это может сделать вышележащий компонент, и тогда наш компонент получит родительский Dependency Injector, даже не подозревая, что это не глобальный класс, а персональный инстанс родителя !
https://angular.io/docs/ts/latest/guide/hierarchical-dependency-injection.html


А насчет Observable. Решение с ними лучше чем просто вывод сторонней переменной, т.к. можно прикрутить логику обработки этой переменной. Не бездумно ее вывести на экран, а, к примеру, провалидировать, изменить и т.д.
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39449249
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlderага. Так понятно. Хороший совет, не создавать полностью глобальных переменных, только в составе класса. В этом случае это тестируемо. В принципе это я и так знаю - глобальные переменные это зло. Также как и синглтоны. Их сложно тестировать, их сложно мокать.

У тебя каша в голове. Глобальные переменные, синглтоны, зло какое-то. Ты понял что такое dot rule?

TsHeloWorlderОднако, хочу вас предупредить, что во втором Ангуляре этот подход не так хорошо работает. В Ангуляре 2 можно в любом компоненте заявить новый провайдер для класса, и тогда будет создан новый инстанс, а не использован глобальный.

Так объяви сервис на уровне приложения, в чем проблема?

TsHeloWorlderА насчет Observable. Решение с ними лучше чем просто вывод сторонней переменной, т.к. можно прикрутить логику обработки этой переменной. Не бездумно ее вывести на экран, а, к примеру, провалидировать, изменить и т.д.

О Боги. Открой для себя геттеры и сеттеры. И если ты так проникся rx - то она реализована для многих языков. "Решение с ним лучше". ))))
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39449267
TsHeloWorlder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,

dot rule - требование не использовать глобальные переменные, а только переменные в составе другого класса. Грубо говоря создание класса со списком констант, и этот класс нужно уже передавать. Что позволяет в тестах создать один класс (с заданными константами), а в продакшене совсем другой.
Что я не правильно понял, где каша ?

"Так объяви сервис на уровне приложения, в чем проблема?". Вы в курсе, что если объявить компонент так:
Код: html
1.
2.
3.
4.
5.
@Component({
  selector: 'villains-list',
  templateUrl: './villains-list.component.html',
  providers: [ VillainsService ]
})


то в компонент придет сервис VillainsService никак не связанный с тем, что объявлен на уровне приложения ? Проблема в этом.
...
Рейтинг: 0 / 0
Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
    #39449270
TsHeloWorlder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Angular has a Hierarchical Dependency Injection system. There is actually a tree of injectors that parallel an application's component tree. You can reconfigure the injectors at any level of that component tree.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Ангуляр2. Можно ли отслеживать изменение сущности, без необходимости объявлять ее какInput
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]