Angular Draggable Properties

This section describes properties that configure the Draggable UI component's contents, behavior, and appearance.

autoScroll

Enables automatic scrolling while dragging an item beyond the viewport.

Type:

Boolean

Default Value: true

boundary

Specifies a DOM element that limits the dragging area.

Default Value: undefined

This property accepts the following value types:

  • String
    A CSS selector. For example: "#elementId".
  • DOM Node
    An HTML DOM element. For example: document.getElementById("elementId").
  • jQuery
    A CSS selector wrapped in a jQuery element. For example: $("#elementId").

clone

Allows a user to drag clones of items instead of actual items.

Type:

Boolean

Default Value: false

container

Specifies a custom container in which the draggable item should be rendered.

Default Value: undefined

This property accepts the following value types:

  • String
    A CSS selector. For example: "#elementId".
  • DOM Node
    An HTML DOM element. For example: document.getElementById("elementId").
  • jQuery
    A CSS selector wrapped in a jQuery element. For example: $("#elementId").

cursorOffset

Specifies the cursor offset from the dragged item.

Selector: dxo-cursor-offset
Type:

String

|

Object

data

A container for custom data.

Type: any
Default Value: undefined

dragDirection

Specifies the directions in which an item can be dragged.

Default Value: 'both'

dragTemplate

Specifies custom markup to be shown instead of the item being dragged.

Type:

template

Template Data:
Name Type Description
itemData any

The item's data. Note that you should specify the item data manually.

itemElement

HTMLElement | jQuery

The container of the item being dragged. It is an HTML Element or a jQuery Element when you use jQuery.

Default Name: undefined

jQuery
index.js
data.js
$(function() {
    $("#draggable").dxDraggable({
        data: tasks,
        dragTemplate: dragTemplateFunc,       
        onDragStart: function (e) {
            e.itemData = e.fromData.text;
            // your code
        }
    });
}); 

function dragTemplateFunc(item, customContainer){
    var $customContainer = $(document.createElement("div")) 
        .text(item.itemData + ' drag template');
    return $customContainer;
}
const tasks = [
{
    text: 'New Brochures',
}, {
    text: 'Brochure Design Review',
}, 
    //...
];
Angular
TypeScript
HTML
import { DxDraggableModule } from "devextreme-angular";
// ...
export class AppComponent {
    onDragStart(e){
        e.itemData = e.fromData.text;
        // ...
    }
}
@NgModule({
    imports: [
        // ...
        DxDraggableModule
    ],
    // ...
})
<dx-draggable
    [data]="task"
    (onDragStart)="onDragStart($event)"
    dragTemplate="myDragTemplate"
>
    <div *dxTemplate="let e of 'myDragTemplate'">
        <div>{{ e.itemData + " drag template" }}</div>
    </div>          
</dx-draggable>
Vue
App.vue
<template>
    <DxDraggable
        :data="task"
        @drag-start="onDragStart"
        :drag-template="myDragTemplate"
    >
        {{task.text}}
        <template #myDragTemplate="{ data }">
            <div>{{ data.itemData}} + "drag template"</div>
        </template>
    </DxDraggable>
</template>
<script>

import DxDraggable from 'devextreme-vue/draggable';

export default {
    components: {
        DxDraggable
    },
    data() {
        return {
            tasks,
            myDragTemplate: "myDragTemplate",
            //...
        };
    },        
    methods: {
        onDragStart(e) {
            e.itemData = e.fromData.text;
            // ...
        }
    }
}
</script>
React
App.js
import React from 'react';

import Draggable from 'devextreme-react/draggable';
import { Template } from 'devextreme-react/core/template';

function myDragTemplate(e) {
    return (
        e.itemData + " drag template";
    );
}

class App extends React.Component {
    constructor(props) {
        //...
    }        
    render() {
        return (
            <Draggable
                data={tasks}
                onDragStart={this.onDragStart}
                dragTemplate={myDragTemplate}>
            </Draggable>                
        );
    }
    onDragStart = (e) => {
        e.itemData = e.fromData.text;
        // your code
    }
}
export default App;
ASP.NET Core Controls
Razor C#
@(Html.DevExtreme().Draggable()
    .DataSource(d => d.Mvc()
        // ...
    )
    .OnDragStart("onDragStart")
    .DragTemplate(new JS("dragTemplateFunc"))
)

<script>
    function onDragStart(e) {
        e.itemData = e.fromData.text;
        // your code
    }

    function dragTemplateFunc(item, customContainer){
        var $customContainer = $(document.createElement("div")) 
            .text(item.itemData + ' drag template');
        return $customContainer;
    }
</script>

elementAttr

Specifies the global attributes to be attached to the UI component's container element.

Selector: dxo-element-attr
Type:

Object

Default Value: {}

jQuery
$(function(){
    $("#draggableContainer").dxDraggable({
        // ...
        elementAttr: {
            id: "elementId",
            class: "class-name"
        }
    });
});
Angular
HTML
TypeScript
<dx-draggable ...
    [elementAttr]="{ id: 'elementId', class: 'class-name' }">
</dx-draggable>
import { DxDraggableModule } from "devextreme-angular";
// ...
export class AppComponent {
    // ...
}
@NgModule({
    imports: [
        // ...
        DxDraggableModule
    ],
    // ...
})
Vue
App.vue
<template>
    <DxDraggable ...
        :element-attr="draggableAttributes">
    </DxDraggable>
</template>

<script>
import DxDraggable from 'devextreme-vue/draggable';

export default {
    components: {
        DxDraggable
    },
    data() {
        return {
            draggableAttributes: {
                id: 'elementId',
                class: 'class-name'
            }
        }
    }
}
</script>
React
App.js
import React from 'react';

import Draggable from 'devextreme-react/draggable';

class App extends React.Component {
    draggableAttributes = {
        id: 'elementId',
        class: 'class-name'
    }

    render() {
        return (
            <Draggable ...
                elementAttr={this.draggableAttributes}>
            </Draggable>
        );
    }
}
export default App;

group

Allows you to group several UI components, so that users can drag and drop items between them.

Type:

String

Default Value: undefined

Set this property to identical values for the UI components you want to collect into a single group.

handle

Specifies a CSS selector (ID or class) that should act as the drag handle(s) for the item(s).

Type:

String

Default Value: ''

height

Specifies the UI component's height.

Type:

Number

|

String

|

Function

Return Value:

Number

|

String

The UI component's height.

Default Value: undefined

This property accepts a value of one of the following types:

  • Number
    The height in pixels.

  • String
    A CSS-accepted measurement of height. For example, "55px", "20vh", "80%", "inherit".

  • Function (deprecated since v21.2)
    Refer to the W0017 warning description for information on how you can migrate to viewport units.

onDisposing

A function that is executed before the UI component is disposed of.

Type:

Function

Function parameters:

Information about the event.

Object structure:
Name Type Description
model any

The model data. Available only if you use Knockout.

element

HTMLElement | jQuery

The UI component's container. It is an HTML Element or a jQuery Element when you use jQuery.

component Draggable

The UI component's instance.

Default Value: null

onDragEnd

A function that is called when a drag gesture is finished.

Type:

Function

Function parameters:

Information about the event that caused the function's execution.

Object structure:
Name Type Description
cancel

Boolean

Allows you to cancel the gesture.

component Draggable

The UI component that raised the event.

element

HTMLElement | jQuery

The UI component's container. It is an HTML Element or a jQuery Element when you use jQuery.

event

Event (jQuery or EventObject)

The event that caused the function to execute. It is an EventObject or a jQuery.Event when you use jQuery.

fromComponent

Sortable

|

Draggable

The instance of the item's source UI component. Works only for element drag and drop between components.

fromData any

Custom data associated with the source UI component. Works only for element drag and drop between components.

itemData any

The item's data before the drag operation. Note that you should specify the item data manually.

itemElement

HTMLElement | jQuery

The container of the item being dragged. It is an HTML Element or a jQuery Element when you use jQuery.

model any

Model data. Available only if you use Knockout.

toComponent

Sortable

|

Draggable

The instance of the item's target UI component. Works only for element drag and drop between components.

toData any

Custom data associated with the target UI component. Works only for element drag and drop between components.

Default Value: null

jQuery
index.js
data.js
$(function() {
    $("#draggable").dxDraggable({
        data: tasks,
        dragTemplate: dragTemplateFunc,       
        onDragEnd: function (e) {
            e.itemData = e.fromData.text;
            // your code
        }
    });
}); 

function dragTemplateFunc(item, customContainer){
    var $customContainer = $(document.createElement("div")) 
        .text(item.itemData + ' drag template');
    return $customContainer;
}
const tasks = [
{
    text: 'New Brochures',
}, {
    text: 'Brochure Design Review',
}, 
    //...
];
Angular
TypeScript
HTML
import { DxDraggableModule } from "devextreme-angular";
// ...
export class AppComponent {
    onDragEnd(e){
        e.itemData = e.fromData.text;
        // ...
    }
}
@NgModule({
    imports: [
        // ...
        DxDraggableModule
    ],
    // ...
})
<dx-draggable
    [data]="task"
    (onDragEnd)="onDragEnd($event)"
    dragTemplate="myDragTemplate"
>
    <div *dxTemplate="let e of 'myDragTemplate'">
        <div>{{ e.itemData + " drag template" }}</div>
    </div>          
</dx-draggable>
Vue
App.vue
<template>
    <DxDraggable
        :data="task"
        @drag-end="onDragEnd"
        :drag-template="myDragTemplate"
    >
        {{task.text}}
        <template #myDragTemplate="{ data }">
            <div>{{ data.itemData}} + "drag template"</div>
        </template>
    </DxDraggable>
</template>
<script>

import DxDraggable from 'devextreme-vue/draggable';

export default {
    components: {
        DxDraggable
    },
    data() {
        return {
            tasks,
            myDragTemplate: "myDragTemplate",
            //...
        };
    },        
    methods: {
        onDragEnd(e) {
            e.itemData = e.fromData.text;
            // ...
        }
    }
}
</script>
React
App.js
import React from 'react';

import Draggable from 'devextreme-react/draggable';
import { Template } from 'devextreme-react/core/template';

function myDragTemplate(e) {
    return (
        e.itemData + " drag template";
    );
}

class App extends React.Component {
    constructor(props) {
        //...
    }        
    render() {
        return (
            <Draggable
                data={tasks}
                onDragEnd={this.onDragEnd}
                dragTemplate={myDragTemplate}>
            </Draggable>                
        );
    }
    onDragEnd = (e) => {
        e.itemData = e.fromData.text;
        // your code
    }
}
export default App;
ASP.NET Core Controls
Razor C#
@(Html.DevExtreme().Draggable()
    .DataSource(d => d.Mvc()
        // ...
    )
    .OnDragEnd("onDragEnd")
    .DragTemplate(new JS("dragTemplateFunc"))
)

<script>
    function onDragEnd(e) {
        e.itemData = e.fromData.text;
        // your code
    }

    function dragTemplateFunc(item, customContainer){
        var $customContainer = $(document.createElement("div")) 
            .text(item.itemData + ' drag template');
        return $customContainer;
    }
</script>

onDragMove

A function that is called every time a draggable item is moved.

Type:

Function

Function parameters:

Information about the event that caused the function's execution.

Object structure:
Name Type Description
cancel

Boolean

Allows you to cancel the gesture.

component Draggable

The UI component that raised the event.

element

HTMLElement | jQuery

The UI component's container. It is an HTML Element or a jQuery Element when you use jQuery.

event

Event (jQuery or EventObject)

The event that caused the function to execute. It is an EventObject or a jQuery.Event when you use jQuery.

fromComponent

Sortable

|

Draggable

The instance of the item's source UI component. Works only for element drag and drop between components.

fromData any

Custom data associated with the source UI component. Works only for element drag and drop between components.

itemData any

The item's data before the drag operation. Note that you should specify the item data manually.

itemElement

HTMLElement | jQuery

The container of the item being dragged. It is an HTML Element or a jQuery Element when you use jQuery.

model any

Model data. Available only if you use Knockout.

toComponent

Sortable

|

Draggable

The instance of the item's target UI component. Works only for element drag and drop between components.

toData any

Custom data associated with the target UI component. Works only for element drag and drop between components.

Default Value: null

jQuery
index.js
data.js
$(function() {
    $("#draggable").dxDraggable({
        data: tasks,
        dragTemplate: dragTemplateFunc,       
        onDragMove: function (e) {
            e.itemData = e.fromData.text;
            // your code
        }
    });
}); 

function dragTemplateFunc(item, customContainer){
    var $customContainer = $(document.createElement("div")) 
        .text(item.itemData + ' drag template');
    return $customContainer;
}
const tasks = [
{
    text: 'New Brochures',
}, {
    text: 'Brochure Design Review',
}, 
    //...
];
Angular
TypeScript
HTML
import { DxDraggableModule } from "devextreme-angular";
// ...
export class AppComponent {
    onDragMove(e){
        e.itemData = e.fromData.text;
        // ...
    }
}
@NgModule({
    imports: [
        // ...
        DxDraggableModule
    ],
    // ...
})
<dx-draggable
    [data]="task"
    (onDragMove)="onDragMove($event)"
    dragTemplate="myDragTemplate"
>
    <div *dxTemplate="let e of 'myDragTemplate'">
        <div>{{ e.itemData + " drag template" }}</div>
    </div>          
</dx-draggable>
Vue
App.vue
<template>
    <DxDraggable
        :data="task"
        @drag-move="onDragMove"
        :drag-template="myDragTemplate"
    >
        {{task.text}}
        <template #myDragTemplate="{ data }">
            <div>{{ data.itemData}} + "drag template"</div>
        </template>
    </DxDraggable>
</template>
<script>

import DxDraggable from 'devextreme-vue/draggable';

export default {
    components: {
        DxDraggable
    },
    data() {
        return {
            tasks,
            myDragTemplate: "myDragTemplate",
            //...
        };
    },        
    methods: {
        onDragMove(e) {
            e.itemData = e.fromData.text;
            // ...
        }
    }
}
</script>
React
App.js
import React from 'react';

import Draggable from 'devextreme-react/draggable';
import { Template } from 'devextreme-react/core/template';

function myDragTemplate(e) {
    return (
        e.itemData + " drag template";
    );
}

class App extends React.Component {
    constructor(props) {
        //...
    }        
    render() {
        return (
            <Draggable
                data={tasks}
                onDragMove={this.onDragMove}
                dragTemplate={myDragTemplate}>
            </Draggable>                
        );
    }
    onDragMove = (e) => {
        e.itemData = e.fromData.text;
        // your code
    }
}
export default App;
ASP.NET Core Controls
Razor C#
@(Html.DevExtreme().Draggable()
    .DataSource(d => d.Mvc()
        // ...
    )
    .OnDragMove("onDragMove")
    .DragTemplate(new JS("dragTemplateFunc"))
)

<script>
    function onDragMove(e) {
        e.itemData = e.fromData.text;
        // your code
    }

    function dragTemplateFunc(item, customContainer){
        var $customContainer = $(document.createElement("div")) 
            .text(item.itemData + ' drag template');
        return $customContainer;
    }
</script>

onDragStart

A function that is called when a drag gesture is initialized.

Type:

Function

Function parameters:

Information about the event that caused the function's execution.

Object structure:
Name Type Description
cancel

Boolean

Allows you to cancel the gesture.

component Draggable

The UI component that raised the event.

element

HTMLElement | jQuery

The UI component's container. It is an HTML Element or a jQuery Element when you use jQuery.

event

Event (jQuery or EventObject)

The event that caused the function to execute. It is an EventObject or a jQuery.Event when you use jQuery.

fromData any

Custom data associated with the source UI component. Works only for element drag and drop between components.

itemData any

The item's data before the drag operation. Note that you should specify the item data manually.

itemElement

HTMLElement | jQuery

The container of the item being dragged. It is an HTML Element or a jQuery Element when you use jQuery.

model any

Model data. Available only if you use Knockout.

Default Value: null

jQuery
index.js
data.js
$(function() {
    $("#draggable").dxDraggable({
        data: tasks,
        dragTemplate: dragTemplateFunc,       
        onDragStart: function (e) {
            e.itemData = e.fromData.text;
            // your code
        }
    });
}); 

function dragTemplateFunc(item, customContainer){
    var $customContainer = $(document.createElement("div")) 
        .text(item.itemData + ' drag template');
    return $customContainer;
}
const tasks = [
{
    text: 'New Brochures',
}, {
    text: 'Brochure Design Review',
}, 
    //...
];
Angular
TypeScript
HTML
import { DxDraggableModule } from "devextreme-angular";
// ...
export class AppComponent {
    onDragStart(e){
        e.itemData = e.fromData.text;
        // ...
    }
}
@NgModule({
    imports: [
        // ...
        DxDraggableModule
    ],
    // ...
})
<dx-draggable
    [data]="task"
    (onDragStart)="onDragStart($event)"
    dragTemplate="myDragTemplate"
>
    <div *dxTemplate="let e of 'myDragTemplate'">
        <div>{{ e.itemData + " drag template" }}</div>
    </div>          
</dx-draggable>
Vue
App.vue
<template>
    <DxDraggable
        :data="task"
        @drag-start="onDragStart"
        :drag-template="myDragTemplate"
    >
        {{task.text}}
        <template #myDragTemplate="{ data }">
            <div>{{ data.itemData}} + "drag template"</div>
        </template>
    </DxDraggable>
</template>
<script>

import DxDraggable from 'devextreme-vue/draggable';

export default {
    components: {
        DxDraggable
    },
    data() {
        return {
            tasks,
            myDragTemplate: "myDragTemplate",
            //...
        };
    },        
    methods: {
        onDragStart(e) {
            e.itemData = e.fromData.text;
            // ...
        }
    }
}
</script>
React
App.js
import React from 'react';

import Draggable from 'devextreme-react/draggable';
import { Template } from 'devextreme-react/core/template';

function myDragTemplate(e) {
    return (
        e.itemData + " drag template";
    );
}

class App extends React.Component {
    constructor(props) {
        //...
    }        
    render() {
        return (
            <Draggable
                data={tasks}
                onDragStart={this.onDragStart}
                dragTemplate={myDragTemplate}>
            </Draggable>                
        );
    }
    onDragStart = (e) => {
        e.itemData = e.fromData.text;
        // your code
    }
}
export default App;
ASP.NET Core Controls
Razor C#
@(Html.DevExtreme().Draggable()
    .DataSource(d => d.Mvc()
        // ...
    )
    .OnDragStart("onDragStart")
    .DragTemplate(new JS("dragTemplateFunc"))
)

<script>
    function onDragStart(e) {
        e.itemData = e.fromData.text;
        // your code
    }

    function dragTemplateFunc(item, customContainer){
        var $customContainer = $(document.createElement("div")) 
            .text(item.itemData + ' drag template');
        return $customContainer;
    }
</script>

onInitialized

A function used in JavaScript frameworks to save the UI component instance.

Type:

Function

Function parameters:

Information about the event.

Object structure:
Name Type Description
element

HTMLElement | jQuery

The UI component's container. It is an HTML Element or a jQuery Element when you use jQuery.

component Draggable

The UI component's instance.

Default Value: null

Angular
app.component.html
app.component.ts
<dx-draggable ...
    (onInitialized)="saveInstance($event)">
</dx-draggable>
import { Component } from "@angular/core";
import Draggable from "devextreme/ui/data_grid";
// ...
export class AppComponent {
    draggableInstance: Draggable;
    saveInstance (e) {
        this.draggableInstance = e.component;
    }
}
Vue
App.vue (Options API)
App.vue (Composition API)
<template>
    <div>
        <DxDraggable ...
            @initialized="saveInstance">
        </DxDraggable>
    </div>
</template>

<script>
import DxDraggable from 'devextreme-vue/draggable';

export default {
    components: {
        DxDraggable
    },
    data: function() {
        return {
            draggableInstance: null
        };
    },
    methods: {
        saveInstance: function(e) {
            this.draggableInstance = e.component;
        }
    }
};
</script>
<template>
    <div>
        <DxDraggable ...
            @initialized="saveInstance">
        </DxDraggable>
    </div>
</template>

<script setup>
import DxDraggable from 'devextreme-vue/draggable';

let draggableInstance = null;

const saveInstance = (e) => {
    draggableInstance = e.component;
}
</script>
React
App.js
import Draggable from 'devextreme-react/draggable';

class App extends React.Component {
    constructor(props) {
        super(props);

        this.saveInstance = this.saveInstance.bind(this);
    }

    saveInstance(e) {
        this.draggableInstance = e.component;
    }

    render() {
        return (
            <div>
                <Draggable onInitialized={this.saveInstance} />
            </div>
        );
    }
}
See Also
jQuery
  • Get a UI component Instance in jQuery
Angular
  • Get a UI component Instance in Angular
Vue
  • Get a UI component Instance in Vue
React
  • Get a UI component Instance in React

onOptionChanged

A function that is executed after a UI component property is changed.

Type:

Function

Function parameters:

Information about the event.

Object structure:
Name Type Description
value any

The modified property's new value.

previousValue any

The UI component's previous value.

name

String

The modified property if it belongs to the first level. Otherwise, the first-level property it is nested into.

model any

Model data. Available only if you use Knockout.

fullName

String

The path to the modified property that includes all parent properties.

element

HTMLElement | jQuery

The UI component's container. It is an HTML Element or a jQuery Element when you use jQuery.

component Draggable

The UI component's instance.

Default Value: null

The following example shows how to subscribe to component property changes:

jQuery
index.js
$(function() {
    $("#draggableContainer").dxDraggable({
        // ...
        onOptionChanged: function(e) {
            if(e.name === "changedProperty") {
                // handle the property change here
            }
        }
    });
});
Angular
app.component.html
app.component.ts
app.module.ts
<dx-draggable ...
    (onOptionChanged)="handlePropertyChange($event)"> 
</dx-draggable>
import { Component } from '@angular/core'; 

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'] 
}) 

export class AppComponent { 
    // ...
    handlePropertyChange(e) {
        if(e.name === "changedProperty") { 
            // handle the property change here
        }
    }
}
import { BrowserModule } from '@angular/platform-browser'; 
import { NgModule } from '@angular/core'; 
import { AppComponent } from './app.component'; 
import { DxDraggableModule } from 'devextreme-angular'; 

@NgModule({ 
    declarations: [ 
        AppComponent 
    ], 
    imports: [ 
        BrowserModule, 
        DxDraggableModule 
    ], 
    providers: [ ], 
    bootstrap: [AppComponent] 
}) 

export class AppModule { }  
Vue
App.vue
<template> 
    <DxDraggable ...
        @option-changed="handlePropertyChange"
    />            
</template> 

<script>  
import 'devextreme/dist/css/dx.light.css'; 
import DxDraggable from 'devextreme-vue/draggable'; 

export default { 
    components: { 
        DxDraggable
    }, 
    // ...
    methods: { 
        handlePropertyChange: function(e) {
            if(e.name === "changedProperty") {
                // handle the property change here
            }
        }
    } 
} 
</script> 
React
App.js
import React from 'react';  
import 'devextreme/dist/css/dx.light.css'; 

import Draggable from 'devextreme-react/draggable'; 

const handlePropertyChange = (e) => {
    if(e.name === "changedProperty") {
        // handle the property change here
    }
}

export default function App() { 
    return ( 
        <Draggable ...
            onOptionChanged={handlePropertyChange}
        />        
    ); 
} 

rtlEnabled

Switches the UI component to a right-to-left representation.

Type:

Boolean

Default Value: false

When this property is set to true, the UI component text flows from right to left, and the layout of elements is reversed. To switch the entire application/site to the right-to-left representation, assign true to the rtlEnabled field of the object passed to the DevExpress.config(config) method.

JavaScript
DevExpress.config({
    rtlEnabled: true
});

DataGrid Demo Navigation UI Demo Editors Demo

scrollSensitivity

Specifies the distance in pixels from the edge of viewport at which scrolling should start. Applies only if autoScroll is true.

Type:

Number

Default Value: 60

See Also

scrollSpeed

Specifies the scrolling speed when dragging an item beyond the viewport. Applies only if autoScroll is true.

Type:

Number

Default Value: 30

See Also

width

Specifies the UI component's width.

Type:

Number

|

String

|

Function

Return Value:

Number

|

String

The UI component's width.

Default Value: undefined

This property accepts a value of one of the following types:

  • Number
    The width in pixels.

  • String
    A CSS-accepted measurement of width. For example, "55px", "20vw", "80%", "auto", "inherit".

  • Function (deprecated since v21.2)
    Refer to the W0017 warning description for information on how you can migrate to viewport units.