Не удалось отсортировать несколько разных списков, используя библиотеку сортировки ng2-dnd
Я использую несколько хороших и простую библиотеку drag-and-drop из github, и у меня есть представление с тремя различными кнопками, каждый из которых представляет список когда его щелкают в том же месте, но НЕ в одно и то же время.
По какой-то причине можно сортировать только первый список, но другие 2 не... Я могу перемещать объекты, но они не изменяются, поэтому я не могу изменить порядок.
это мой html:
<div>
<!-- list 1 button -->
<button md-button
(click)="showFirstList()"
class="md-primary">List 1
</button>
<!-- list 2 button -->
<button md-button
(click)="showSecondList()"
class="md-primary">List 2
</button>
<!-- list 3 button -->
<button md-button
(click)="ThirdList()"
class="md-primary">List 3
</button>
</div>
<md-content>
<div *ngIf="showingListOne">
<div dnd-sortable-container [dropZones]="['zone-one']" [sortableData]="listOneToDisplay | async">
<div class="list-bg" *ngFor="#item of listOneToDisplay | async; #i = index" dnd-sortable [sortableIndex]="i">
ID: {{item.id}} <p></p> name: {{item.name}}
</div>
</div><br><br>
</div>
<div *ngIf="showingListTwo">
<div dnd-sortable-container [dropZones]="['zone-two']" [sortableData]="listTwoToDisplay | async">
<div class="list-bg" *ngFor="#item of listTwoToDisplay | async; #i = index" dnd-sortable [sortableIndex]="i">
ID: {{item.id}} <p></p> age: {{item.age}}
</div>
</div>
</div>
<div *ngIf="showingListThree">
<div dnd-sortable-container [dropZones]="['zone-three']" [sortableData]="listThreeToDisplay | async">
<div class="list-bg" *ngFor="#item of listThreeToDisplay | async; #i = index" dnd-sortable [sortableIndex]="i">
ID: {{item.id}} <p></p> age: {{item.age}}
</div>
</div>
</div>
</div>
</md-content>
это мой sorting-lists.component.ts:
@Component({
selector: 'sorting-lists',
styles: [require('./sorting-lists.css')],
directives: [DND_DIRECTIVES],
providers: [DND_PROVIDERS],
template: require('./sorting-lists.component.html')
})
@Injectable()
export class MyCmp implements OnInit {
listOneToDisplay = this._myService.getFirstListData();
listTwoToDisplay = this._myService.getSecondListData();
listThreeToDisplay = this._myService.getThirdListData();
showingListOne = false;
showingListTwo = false;
showingListThree = false;
constructor(private _myService: MyService) {
};
public showFirstList(): void {
this.showingListOne = true;
this.showingListTwo = false;
this.showingListThree = false;
}
public showSecondList(): void {
this.showingListTwo = true;
this.showingListOne = false;
this.showingListThree = false;
}
public showThirdList(): void {
this.showingListThree = true;
this.showingListTwo = false;
this.showingListOne = false;
}
}
если кто-то может помочь мне понять, почему только первый сортируется, он будет благословлен.
спасибо:)
Ответы
Ответ 1
EDIT2: (Согласно вашей новой версии вопроса):
Попробуйте предоставить DND_PROVIDERS в бутстрапе вашего приложения, вместо этого, чтобы предоставить его в своем компоненте. Для более подробной информации смотрите здесь.
bootstrap(AppComponent, [
DND_PROVIDERS // It is required to have 1 unique instance of your service
]);
Вы также можете использовать ng2-dragula, который является официальной упаковкой Angular2 для dragula.
Установить через npm
EDIT. Чтобы использовать ng2-dragular с angular 2.0.0-beta.15, добавьте пакет ng2-dragula с ссылкой github с последним фиксатором прежде чем они перейдут на RC.1 в вашем package.json
:
ng2-dragula": "git://github.com/valor-software/ng2-dragula.git#0cdcd52b1a486609ed4b4a43465b1dac2bb1b007
> npm install
Использование
Добавьте DragulaService к своим компонентам и добавьте Dragula в директивы своих компонентов.
@Component({
selector: 'sample',
directives: [Dragula],
viewProviders: [DragulaService],
template:`
<div>
<div class='wrapper'>
<div class='container' [dragula]='"first-bag"'>
<div>You can move these elements between these two containers</div>
<div>Moving them anywhere else isn't quite possible</div>
<div>There also the possibility of moving elements around in the same container, changing their position</div>
</div>
<div class='container' [dragula]='"first-bag"'>
<div>This is the default use case. You only need to specify the containers you want to use</div>
<div>More interactive use cases lie ahead</div>
<div>Make sure to check out the <a href='https://github.com/bevacqua/dragula#readme'>documentation on GitHub!</a></div>
</div>
</div>
</div>
`
})
class Sample {}
Ответ 2
Я использую либо ng2-dragula (https://github.com/valor-software/ng2-dragula), либо primeng (http://www.primefaces.org/primeng).
Если я понимаю ваш образец, ng2-dragula должен выполнить эту работу.
Не уверен, что они работают с версией Angular2, которую вы должны использовать.
Я надеюсь, что это поможет
Ответ 3
Вы можете использовать ng2-dnd
.
ng2-dnd
Я использовал его в бета-версии angular2 и его довольно легко и гибко использовать.
Надеюсь, что это поможет.