Компоненты не перетаскиваются в Angular2 для Dart при привязке объектов с помощью ngFor

Я создал компонент, который является перетаскиваемым элементом.

@Component(
    selector: 'draggable-component',
    styles: const ['.element-to-drag {background-color: yellow; border: 1px solid blue; height: 50px; width: 50px;}'],
    template: '''
      <div class="element-to-drag"
           draggable="true"
           (dragstart)="onDragStart(\$event)"
           (dragend)="onDragEnd(\$event)">
      </div>''')
class DraggableComponent {
  void onDragStart(MouseEvent e) {
    print('onDragStart');
  }

  void onDragEnd(MouseEvent e) {
    print('onDragEnd');
  }
}
  • Когда я использую его как отдельный элемент, он запускает событие начала перетаскивания и МОЖЕТ БЫТЬ перетащен в зону перетаскивания.

  • Когда я создаю его с помощью ngFor списка примитивов (чисел), все элементы запускают событие начала перетаскивания и МОЖЕТ БЫТЬ перетаскиваемым в зону перетаскивания.

  • Но когда я создаю его с помощью ngFor of objects list, все элементы запускают событие начала перетаскивания, но НЕ МОЖЕТ БЫТЬ перетаскиваемым в зону перетаскивания (они не перетаскиваются).

Вот пример:

@Component(
    selector: 'my-app',
    directives: const [DraggableComponent, NgFor],
    styles: const ['.container {border: 1px solid red;; height: 100px; width: 100px;}'],
    template: '''
  <div>
    <div class="container"></div>
    <h3>Single</h3>
    <draggable-component></draggable-component>
    <h3>Primitives</h3>
    <draggable-component *ngFor="#example of examplesPrimitives"></draggable-component>
    <h3>Objects</h3>
    <draggable-component *ngFor="#example of examples"></draggable-component>
  </div>
  ''')
class AppComponent {
  get examples => [
    {"name": 1},
    {"name": 2},
    {"name": 3},
    {"name": 4} ];

  get examplesPrimitives => [ 1,2,3,4,5];
}

Как сделать привязки объектов перетаскиваемыми?


person ne4istb    schedule 08.02.2016    source источник
comment
Я не уверен на 100%, что это сработает, поэтому я не буду оставлять это в качестве ответа, но вы можете создать цикл *ngFor вне <draggable-component> и создать несколько перетаскиваемых компонентов, каждый со своим собственным объектом, выполняющим что-то вроде этого <div *ngFor="#example of examples"><draggable-component [example] = example></draggable-component.</div> Затем используйте input: [example] внутри вашего draggable-component директива.   -  person Morgan G    schedule 09.02.2016
comment
Вы исследовали созданный DOM? Есть ли отличия? ИМХО отличий быть не должно.   -  person Günter Zöchbauer    schedule 09.02.2016
comment
Morgan G, я тоже пробовал этот кейс, и он тоже не работает.   -  person ne4istb    schedule 09.02.2016
comment
Гюнтер Цохбауэр, я проверил DOM и нет никакой разницы. Я тоже не ожидал никакой разницы в поведении, но что-то не так. Собираюсь проверить тот же случай в Angular2 с помощью TypeScript.   -  person ne4istb    schedule 09.02.2016
comment
@ GünterZöchbauer, см. Комментарии выше   -  person ne4istb    schedule 09.02.2016
comment
@MorganG, см. Комментарии выше   -  person ne4istb    schedule 09.02.2016
comment
Просто дикая догадка. Вы можете попробовать использовать другую переменную, отличную от #example, во втором *ngFor.   -  person Günter Zöchbauer    schedule 09.02.2016
comment
@ GünterZöchbauer, изначально я столкнулся с этой проблемой из проекта, в котором использовались список объектов и другие имена переменных. Я изолировал код, чтобы найти реальную проблему, и нашел разницу со списком примитивов и отдельным компонентом,   -  person ne4istb    schedule 09.02.2016
comment
Я так и догадался, но попробовать стоило. У вас тоже нет ошибок в консоли браузера?   -  person Günter Zöchbauer    schedule 09.02.2016
comment
@ GünterZöchbauer, спасибо. Попробую это с TypeScript чуть позже, вероятно, есть ошибка в реализации Dart.   -  person ne4istb    schedule 09.02.2016
comment
@ GünterZöchbauer, ошибок в консоли нет. Печатайте только о начале перетаскивания из моего метода onDragStart.   -  person ne4istb    schedule 09.02.2016
comment
И ваш другой связанный код ничего не делает со списком examples, например, проверяет, является ли наведение указателя допустимой целью перетаскивания или что-то подобное?   -  person Günter Zöchbauer    schedule 09.02.2016
comment
@ GünterZöchbauer код в этом вопросе завершен. Только bootstrap и ‹my-app› ‹/my-app› в index.html не включены. Больше ничего.   -  person ne4istb    schedule 09.02.2016
comment
@ GünterZöchbauer, доказал ошибку в Dart-версии Angular2.   -  person ne4istb    schedule 09.02.2016
comment
@ ne4istb извини, я не мог быть более полезным! Надеюсь, ваша проблема с github будет решена!   -  person Morgan G    schedule 10.02.2016


Ответы (1)


Это была ошибка Angular2 с Dart. Angular2 с TypeScript отлично работает в том же случае.

В репозитории Angular возникла проблема: https://github.com/angular/angular/issues/6975

person ne4istb    schedule 09.02.2016