You need to move your dragula directive in the parent container of your items like this:
<div class="container" [dragula]='"bag-one"' [dragulaModel]='items'>
<div [attr.id]="item.id" [attr.title]="i" class="card-item" *ngFor="let item of items; let i=index">
<item-detail></item-detail>
</div>
</div>
In yourComponent.ts
let [el, target, source] = args;
console.log(el.id);
console.log(el.title);
You could also make use of @Input in your Item-Detail component to enter needed id and position.
<item-detail [iteminfo]="item"></item-detail>
In your Component.ts
Import {Component, Input} from '@angular/core';
@Component({....});
@Input() iteminfo: Item;
Here's what i did in my proj. For my parent component:
import { Component, Input } from '@angular/core';
import { Card } from '../model/card';
import { Item } from '../model/item';
import { dragula, DragulaService } from 'ng2-dragula/ng2-dragula';
@Component({
selector: 'card', //parent component for item component
template: `
<div class="items"[dragula]='"bag-one"' [dragulaModel]='card.items'>
<div class="card-item" *ngFor="let item of card.items; let i = index; trackBy item?.item_Id">
<item [item]="item" [index]="i"></item>
</div>
</div>
})
export class CardComponent {
constructor(private dragulaService: DragulaService)
{
dragulaService.setOptions('bag-one', {
revertOnSpill: true
});
dragulaService.drop.subscribe((value) => {
this.onDrop(value.slice(1));
});
}
}
For the Item Component:
import { Component, Input } from '@angular/core';
import { Item } from '../model/item';
@Component({
selector: 'item',
template: `
{{item.title}} {{index}}
`
})
export class ItemComponent implements OnInit {
constructor(private itemSvc:ItemService) {}
private _index: number;
@Input()item: Item;
@Input()
set index(i: number) {
this._index = i;
// Do something here like save to database.
console.log('item index changed: ', this.item.title + i);
}
// Getter for the index Input property
get index(): number{
return this._index;
}
}
Final Note: See "Intercept input property changes with a setter" at angular.io site under CookBook -> Components Interaction https://angular.io/docs/ts/latest/cookbook/