Open and close the ContextMenu manually whenever required by using open and close methods.
In the following sample, the ContextMenu is opened using the open
method at the
specified position with X
and Y
coordinates and to close the ContextMenu, close
method is called internally on ContextMenu item click or document click.
import { enableRipple } from '@syncfusion/ej2-base';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ContextMenuComponent, MenuItemModel } from '@syncfusion/ej2-react-navigations';
import * as React from 'react';
import * as ReactDom from 'react-dom';
enableRipple(true);
class App extends React.Component<{}, {}> {
public cMenu: ContextMenuComponent;
private menuItems: MenuItemModel[] = [
{
text: 'Cut'
},
{
text: 'Copy'
},
{
text: 'Paste'
}
];
constructor(props: any) {
super(props);
this.btnClick = this.btnClick.bind(this);
}
public btnClick(): void {
this.cMenu.open(40, 20);
}
public render() {
return (
<div className="container">
<ContextMenuComponent id='contextmenu' ref={(scope) => this.cMenu = scope as ContextMenuComponent} items={this.menuItems} />
<ButtonComponent onClick={this.btnClick}>Open ContextMenu</ButtonComponent>
</div>
);
}
}
ReactDom.render(<App />,document.getElementById('element'));
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React ContextMenu</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components" />
<meta name="author" content="Syncfusion" />
<link href="//cdn.syncfusion.com/ej2/ej2-base/styles/material.css" rel="stylesheet" />
<link href="//cdn.syncfusion.com/ej2/ej2-buttons/styles/material.css" rel="stylesheet" />
<link href="//cdn.syncfusion.com/ej2/ej2-lists/styles/material.css" rel="stylesheet" />
<link href="//cdn.syncfusion.com/ej2/ej2-inputs/styles/material.css" rel="stylesheet" />
<link href="//cdn.syncfusion.com/ej2/ej2-popups/styles/material.css" rel="stylesheet" />
<link href="//cdn.syncfusion.com/ej2/ej2-navigations/styles/material.css" rel="stylesheet" />
<link href="index.css" rel="stylesheet" />
<link href="//cdn.syncfusion.com/ej2/ej2-react-buttons/styles/button/material.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
</head>
<body>
<div id='element'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
import { enableRipple } from '@syncfusion/ej2-base';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ContextMenuComponent } from '@syncfusion/ej2-react-navigations';
import * as React from 'react';
import * as ReactDom from 'react-dom';
enableRipple(true);
class App extends React.Component {
constructor(props) {
super(props);
this.menuItems = [
{
text: 'Cut'
},
{
text: 'Copy'
},
{
text: 'Paste'
}
];
this.btnClick = this.btnClick.bind(this);
}
btnClick() {
this.cMenu.open(40, 20);
}
render() {
return (<div className="container">
<ContextMenuComponent id='contextmenu' ref={(scope) => this.cMenu = scope} items={this.menuItems}/>
<ButtonComponent onClick={this.btnClick}>Open ContextMenu</ButtonComponent>
</div>);
}
}
ReactDom.render(<App />, document.getElementById('element'));