2016-10-05 5 views
1

Утро все. Я уже спрашивал об этом раньше, но не ответил, но мой вопрос был плохо сформулирован, поэтому I've put together a plunk that will hopefully show what I'm doingКак получить доступ к элементам, созданным с помощью NgFor

Как я могу - у меня есть Service, который предоставляет список имен и треков, которые в настоящее время выбраны. Он также имеет методы для изменения этого выбора и BehaviourSubject, который уведомляет о произошедшем изменении. Выбранное имя отображается в главном приложении.

Полный список имен отображается Component, а другой Component содержит пользовательский интерфейс для изменения выбранного имени.

Когда выбор изменяется, это отражается как в главном приложении, так и по положению ListComponent, которое всегда будет иметь выбранное имя, выровненное слева от экрана.

Мой вопрос касается методов, которые я использую при позиционировании и моделировании ListComp. Они находятся в src/list.com.ts по строке 40 и далее в my plnk.

Когда компонент получает уведомление о том, что выбранный элемент изменен, мне нужно получить ссылку на конкретный элемент HTMLElement, который был создан ngFor на основе этого элемента данных. Затем мне нужно применить стиль к выбранному элементу и переместить контейнер так, чтобы он совпал с остальной частью моего макета.

позиционирование часть работает как вы можете видеть, используя getElementById(), но есть более Угловая как это можно сделать?

Я тогда совершенно не уверен в том, как применить стиль selected к выбранному в данный момент элементу. Все советы здесь хороши!

Я действительно надеюсь, что это имеет смысл. Я потратил слишком много времени на оригинальную сборку, а теперь на plnkr и SO, и я надеюсь, что я просто пропустил лес для деревьев (или что-то еще).

Прошу прокричать, могу ли я прояснить что-либо в своем объяснении.

Спасибо всем большое :)

ответ

1

я не мог полностью понять вашу проблему, но я хотел бы предложить подход, при котором не требуется доступ к элементу, но вместо того, чтобы обновить модель и пусть Угловая сделать DOM модификация:

<div *ngFor="let item of listService.listData" class="cell" id="cell-{{item}}" 
    [class.selected]="item == selected">{{item}}</div> 
constructor(private listService:ListService){ 
accordingly 
    listService.nameSelection.subscribe(name => { 
     this.selected = name; 
    }); 
    } 

Plunker example

+0

Мне нравится этот подход, и он действительно работает, поэтому я даю ** Tick **. Раздражающе, пока это работает в моем примере, когда я пытаюсь использовать его в своей реальной сборке (гораздо более сложной), я получаю еще одну ошибку - ** «Выражение изменилось после того, как оно было проверено» **. Не думайте, что вы можете пролить свет на это? Если нет, я, вероятно, вернусь сюда с другим вопросом, как только я выясню, в чем проблема. Cheers anyway – popClingwrap

+1

Если это связано с тем, что вы изменяете данные модели (свойства, привязанные к представлению) внутри 'ngOnChanges()', 'ngOnInit()', 'ngAfterViewInit()' или аналогичные, затем вводите 'ChangeDetectorRef' и вызываете' detectChanges () 'после модификации. Если нет, то создайте новый вопрос. –

+0

Нет, это похоже на это. Еще раз спасибо :) – popClingwrap

Смежные вопросы