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
<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> <dxi-mention valueExpr="text" displayExpr="text" [dataSource]="employees" ></dxi-mention> <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>
import { NgModule, Component, enableProdMode } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { Employee, Service } from './app.service'; import { DxHtmlEditorModule } from 'devextreme-angular'; if(!/localhost/.test(document.location.host)) { enableProdMode(); } @Component({ selector: 'demo-app', templateUrl: 'app/app.component.html', styleUrls: ['app/app.component.css'], providers: [Service] }) export class AppComponent { employees: Employee[]; constructor(service: Service) { this.employees = service.getEmployees(); } } @NgModule({ imports: [ BrowserModule, DxHtmlEditorModule ], declarations: [AppComponent], bootstrap: [AppComponent] }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule);
::ng-deep #chat-window { background-color: rgba(191, 191, 191, 0.15); height: 350px; padding: 10px; } ::ng-deep .dx-htmleditor { height: 100px; } ::ng-deep #send { float: right; margin: 10px 0px; } ::ng-deep .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); } ::ng-deep .name { font-weight: bold; } ::ng-deep .date { opacity: 0.5; } ::ng-deep .photo { float: left; height: 100%; } ::ng-deep .photo > img { width: 40px; height: 40px; display: block; border-radius: 40px; margin-right: 10px; }
import { Injectable } from '@angular/core'; export class Employee { text: string; team: string; icon: string; } let employees: Employee[] = [{ 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" } ]; @Injectable() export class Service { getEmployees() : Employee[] { return employees; } }
// In real applications, you should not transpile code in the browser. You can see how to create your own application with Angular and DevExtreme here: // https://github.com/DevExpress/devextreme-angular/blob/master/README.md System.config({ transpiler: 'ts', typescriptOptions: { module: "commonjs", emitDecoratorMetadata: true, experimentalDecorators: true }, meta: { 'typescript': { "exports": "ts" } }, paths: { 'npm:': 'https://unpkg.com/' }, map: { 'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js', 'typescript': 'npm:typescript@3.4.5/lib/typescript.js', '@angular/core': 'npm:@angular/core@8.0.0/bundles/core.umd.js', '@angular/common': 'npm:@angular/common@8.0.0/bundles/common.umd.js', '@angular/compiler': 'npm:@angular/compiler@8.0.0/bundles/compiler.umd.js', '@angular/platform-browser': 'npm:@angular/platform-browser@8.0.0/bundles/platform-browser.umd.js', '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic@8.0.0/bundles/platform-browser-dynamic.umd.js', '@angular/router': 'npm:@angular/router@8.0.0/bundles/router.umd.js', '@angular/forms': 'npm:@angular/forms@8.0.0/bundles/forms.umd.js', '@angular/common/http': 'npm:@angular/common@8.0.0/bundles/common-http.umd.js', 'tslib': 'npm:tslib/tslib.js', 'rxjs': 'npm:rxjs@6.3.3', 'rxjs/operators': 'npm:rxjs@6.3.3/operators', 'devextreme': 'npm:devextreme@19.1', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'quill': 'npm:quill@1.3.6/dist/quill.js', 'devextreme-angular': 'npm:devextreme-angular@19.1' }, packages: { 'app': { main: './app.component.ts', defaultExtension: 'ts' }, 'devextreme': { defaultExtension: 'js' }, 'rxjs': { main: 'index.js', defaultExtension: 'js' }, 'rxjs/operators': { main: 'index.js', defaultExtension: 'js' }, 'devextreme-angular': { main: 'index.js', defaultExtension: 'js' } } });
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <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/zone.js@0.6.25/dist/zone.js"></script> <script src="https://unpkg.com/reflect-metadata@0.1.3/Reflect.js"></script> <script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script> <script src="config.js"></script> <script> System.import('app').catch(console.error.bind(console)); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <demo-app>Loading...</demo-app> </div> </body> </html>