文本编辑器 Svelte 组件
文本编辑器 Svelte 组件表示文本编辑器组件。
文本编辑器组件
包含以下组件:
TextEditor
文本编辑器属性
属性 | 类型 | 默认 | 描述 |
---|---|---|---|
<TextEditor> 属性 | |||
值 | 字符串 | 文本编辑器初始 HTML 内容值。 | |
占位符 | 字符串 | 当编辑器为空时显示的编辑器占位符内容。默认情况下未指定 | |
resizable | 布尔值 | false | 使编辑器可调整大小(当其高度适应其内容时) |
模式 | 字符串 | toolbar | 文本编辑器按钮模式。可以是:
|
按钮 | 数组 | 带有编辑器按钮的数组,或带有编辑器按钮数组的数组(组)。默认情况下所有按钮都启用,其默认值是:
| |
dividers | 布尔值 | true | 在按钮组之间添加视觉分隔符 |
imageUrlText | 字符串 | 插入图像 URL | 图像 URL 请求时出现的提示文本 |
linkUrlText | 字符串 | 插入链接 URL | 链接 URL 请求时出现的提示文本 |
clearFormattingOnPaste | 布尔值 | true | 当启用时,它将清除从剪贴板粘贴的任何格式 |
customButtons | 对象 | 带有自定义按钮的对象。对象属性键是用于启用它的按钮 ID。 For example to specify custom button that will add
` |
文本编辑器事件
事件 | 参数 | 描述 |
---|---|---|
<TextEditor> 事件 | ||
textEditorChange | (值) | 当编辑器值发生变化时将触发事件 |
textEditorInput | 当编辑器内容发生“input”事件时将触发事件 | |
textEditorFocus | 当编辑器内容获得焦点时将触发事件 | |
textEditorBlur | 当编辑器内容失去焦点时将触发事件 | |
textEditorButtonClick | (buttonId) | 当编辑器按钮被点击时将触发事件 |
textEditorKeyboardOpen | 当编辑器键盘工具栏出现时将触发事件 | |
textEditorKeyboardClose | 当编辑器键盘工具栏消失时将触发事件 | |
textEditorPopoverOpen | 当编辑器弹出框打开时将触发事件 | |
textEditorPopoverClose | 当编辑器弹出框关闭时将触发事件 | |
textEditorBeforeDestroy | 在文本编辑器实例被销毁之前将触发事件 |
访问文本编辑器实例
如果您需要使用文本编辑器 API您可以通过调用.instance()
组件的方法来访问初始化的Sheet Modal实例。例如:
<TextEditor bind:this={component}>...</TextEditor>
<script>
let component;
// to get instance in some method
component.instance()
</script>
示例
text-editor.svelte
<script>
import {
Page,
Navbar,
BlockTitle,
BlockHeader,
Block,
TextEditor,
List,
ListInput,
} from 'framework7-svelte';
const customButtons = {
hr: {
content: '<hr>',
// eslint-disable-next-line
onClick(editor, buttonEl) {
document.execCommand('insertHorizontalRule', false);
},
},
};
let customValue = `<p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Consequatur sunt, sapiente quis eligendi consectetur hic asperiores assumenda quidem dolore quasi iusto tenetur commodi qui ullam sint sed alias! Consequatur, dolor!</p>
<p>Provident reiciendis exercitationem reprehenderit amet repellat laborum, sequi id quam quis quo quos facere veniam ad libero dolorum animi. Nobis, illum culpa explicabo dolorem vitae ut dolor at reprehenderit magnam?</p>
<p>Qui, animi. Dolores dicta, nobis aut expedita enim eum assumenda modi, blanditiis voluptatibus excepturi non pariatur. Facilis fugit facere sequi molestias nemo in, suscipit inventore consequuntur, repellat perferendis, voluptas odit.</p>
<p>Tempora voluptates, doloribus architecto eligendi numquam facilis perspiciatis autem quam voluptas maxime ratione harum laudantium cum deleniti. In, alias deserunt voluptatibus eligendi libero nobis est unde et perspiciatis cumque voluptatum.</p>
<p>Quam error doloribus qui laboriosam eligendi. Aspernatur quam pariatur perspiciatis reprehenderit atque dicta culpa, aut rem? Assumenda, quibusdam? Reprehenderit necessitatibus facere nemo iure maiores porro voluptates accusamus quibusdam. Nesciunt, assumenda?</p>`;
let listEditorValue = '';
</script>
<Page>
<Navbar title="Text Editor" />
<Block>
<p>
Framework7 comes with a touch-friendly Rich Text Editor component. It is based on modern
"contenteditable" API so it should work everywhere as is.
</p>
<p>
It comes with the basic set of formatting features. But its functionality can be easily
extended and customized to fit any requirements.
</p>
</Block>
<BlockTitle>Default Setup</BlockTitle>
<TextEditor />
<BlockTitle>With Placeholder</BlockTitle>
<TextEditor placeholder="Enter text..." />
<BlockTitle>With Default Value</BlockTitle>
<TextEditor
placeholder="Enter text..."
value={customValue}
onTextEditorChange={(value) => (customValue = value)}
/>
<BlockTitle>Specific Buttons</BlockTitle>
<BlockHeader>It is possible to customize which buttons (commands) to show.</BlockHeader>
<TextEditor
placeholder="Enter text..."
buttons={[
['bold', 'italic', 'underline', 'strikeThrough'],
['orderedList', 'unorderedList'],
]}
/>
<BlockTitle>Custom Button</BlockTitle>
<BlockHeader>
It is possible to create custom editor buttons. Here is the custom "hr" button that adds
horizontal rule:
</BlockHeader>
<TextEditor
placeholder="Enter text..."
{customButtons}
buttons={[['bold', 'italic', 'underline', 'strikeThrough'], 'hr']}
/>
<BlockTitle>Resizable</BlockTitle>
<BlockHeader>Editor will be resized based on its content.</BlockHeader>
<TextEditor
placeholder="Enter text..."
resizable
buttons={['bold', 'italic', 'underline', 'strikeThrough']}
/>
<BlockTitle>Popover Mode</BlockTitle>
<BlockHeader>
In this mode, there is no toolbar with buttons, but they appear as popover when you select any
text in editor.
</BlockHeader>
<TextEditor
placeholder="Enter text..."
mode="popover"
buttons={['bold', 'italic', 'underline', 'strikeThrough']}
style="--f7-text-editor-height: 150px"
/>
<BlockTitle>Keyboard Toolbar Mode</BlockTitle>
<BlockHeader>
In this mode, toolbar with buttons will appear on top of virtual keyboard when editor is in the
focus. It is supported only in iOS, Android cordova apps and in Android Chrome. When not
supported it will fallback to "popover" mode.
</BlockHeader>
<TextEditor
placeholder="Enter text..."
mode="keyboard-toolbar"
style="--f7-text-editor-height: 150px"
/>
<BlockTitle>As List Input</BlockTitle>
<BlockHeader>
Text editor can be used in list with other inputs. In this example it is enabled with
"keyboard-toolbar"/"popover" type for "About" field.
</BlockHeader>
<List strongIos dividersIos outlineIos>
<ListInput type="text" label="Name" placeholder="Your name" />
<ListInput
type="texteditor"
label="About"
placeholder="About"
resizable
textEditorParams={{
mode: 'popover',
buttons: ['bold', 'italic', 'underline', 'strikeThrough'],
}}
value={listEditorValue}
onTextEditorChange={(value) => (listEditorValue = value)}
/>
</List>
</Page>