Your search did not match any results.
Html Editor

Mentions

The HtmlEditor allows a user to mention other users in the text. Users that can be mentioned are suggested in a drop-down list that gets its items from the dataSource.

The suggestion list appears when a user enters a specific marker. To mention a user, enter @ in the text field at the bottom and select the user from the list.

Data for mentions can be from multiple data sources. In this case, you can assign an individual marker to each of them.

Copy to CodeSandBox
Apply
Reset
<template> <div> <div id="chat-window"> <div class="message dx-theme-background-color"> <div class="photo"> <img src="../../../../images/mentions/Kevin-Carter.png"> </div> <div class="name"> Kevin Carter </div> <div class="date"> 07/03/19 - 12:22AM </div> <div class="text"> <span class="dx-mention" spellcheck="false" ><span><span>@</span>John Heart</span></span> What experience do you have in this field? </div> </div> <br> <div class="message dx-theme-background-color"> <div class="photo"> <img src="../../../../images/mentions/John-Heart.png"> </div> <div class="name"> John Heart </div> <div class="date"> 07/03/19 - 12:25AM </div> <div class="text"> I've been in the audio/video industry since 2001, and I've been the CEO of DevAv since 2009. </div> </div> <br> <div class="message dx-theme-background-color"> <div class="photo"> <img src="../../../../images/mentions/Kevin-Carter.png"> </div> <div class="name"> Kevin Carter </div> <div class="date"> 07/03/19 - 12:26AM </div> <div class="text"> That's very interesting. <span class="dx-mention" spellcheck="false" ><span><span>@</span>Olivia Peyton</span></span>, what do you think? </div> </div> </div> <dx-html-editor :mentions="mentions" > <p> <span class="dx-mention" spellcheck="false" data-marker="@" data-mention-value="Kevin Carter" ><span contenteditable="false"><span>@</span>Kevin Carter</span></span> I think John's expertise can be very valuable in our startup. </p> </dx-html-editor> </div> </template> <script> import { DxHtmlEditor } from 'devextreme-vue/html-editor'; import { employees } from './data.js'; export default { components: { DxHtmlEditor }, data() { return { mentions: [{ dataSource: employees, searchExpr: 'text', displayExpr: 'text' }] }; } }; </script> <style> #chat-window { background-color: rgba(191, 191, 191, 0.15); height: 350px; padding: 10px; } .dx-htmleditor { height: 100px; } #send { float: right; margin: 10px 0px; } .message { height: 85px; background-color: inherit; display: inline-block; max-width: 60%; border-radius: 5px; margin: 5px; padding: 10px; box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.1); } .name { font-weight: bold; } .date { opacity: 0.5; } .photo { float: left; height: 100%; } .photo > img { width: 40px; height: 40px; display: block; border-radius: 40px; margin-right: 10px; } </style>
import Vue from 'vue'; import App from './App.vue'; new Vue({ el: '#app', components: { App }, template: '<App/>' });
<!DOCTYPE html> <html> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/19.1.5/css/dx.common.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/19.1.5/css/dx.light.css" /> <script src="https://unpkg.com/core-js@2.4.1/client/shim.min.js"></script> <script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script> <script type="text/javascript" src="config.js"></script> <script type="text/javascript"> System.import('./index.js'); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"> <span v-if="false">Loading...</span> </div> </div> </body> </html>
export const employees = [{ text: 'John Heart', team: 'Engineering', icon: '../../../../images/mentions/John-Heart.png' }, { text: 'Kevin Carter', team: 'Engineering', icon: '../../../../images/mentions/Kevin-Carter.png' }, { text: 'Olivia Peyton', team: 'Management', icon: '../../../../images/mentions/Olivia-Peyton.png' }, { text: 'Robert Reagan', team: 'Management', icon: '../../../../images/mentions/Robert-Reagan.png' }, { text: 'Cynthia Stanwick', team: 'Engineering', icon: '../../../../images/mentions/Cynthia-Stanwick.png' }, { text: 'Brett Wade ', team: 'Analysis', icon: '../../../../images/mentions/Brett-Wade.png' }, { text: 'Greta Sims', team: 'QA', icon: '../../../../images/mentions/Greta-Sims.png' }];
System.config({ transpiler: 'plugin-babel', paths: { 'npm:': 'https://unpkg.com/' }, map: { vue: 'npm:vue@2.6.3/dist/vue.esm.browser.js', 'vue-loader': 'npm:systemjs-vue-browser@latest/index.js', 'devextreme': 'npm:devextreme@19.1', 'devextreme-vue': 'npm:devextreme-vue@19.1', jszip: 'npm:jszip@3.1.3/dist/jszip.min.js', 'quill': 'npm:quill@1.3.6/dist/quill.js', 'plugin-babel': 'npm:systemjs-plugin-babel@0/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel@0/systemjs-babel-browser.js' }, meta: { '*.vue': { loader: 'vue-loader' } }, packages: { 'devextreme-vue': { main: 'index.js' }, 'devextreme': { defaultExtension: 'js' } }, babelOptions: { sourceMaps: false, stage0: true } });