#html #node.js #vue.js
#HTML #node.js #vue.js
Вопрос:
Я хочу добавить страницу, состоящую из Vue, в проект, реализованный на JavaScript. Говорят, что вы можете добавить его, используя адрес CDN, но функция Vue, которую я хочу использовать, похоже, не поддерживает ее. Мы хотим использовать элемент-tiptap .
Это адрес функции, которую вы хотите использовать.
https://github.com/Leecason/element-tiptap
Указанные выше адреса не предоставляют CDN.
Вам нужно использовать element-ui и установить element-tiptap. Но я не знаю, как это реализовать с помощью установки npm.
Приведенный ниже код является базовым примером настройки el-tiptap.
App.vue
<template>
<div id="app">
<header>
<img
src="https://github.com/Leecason/element-tiptap/raw/master/examples/assets/logo_for_github.png?raw=true"
height="50"
class="logo"
>
<iframe
src="https://ghbtns.com/github-btn.html?user=Leecasonamp;repo=element-tiptapamp;type=staramp;count=true"
frameborder="0"
scrolling="0"
width="95"
height="20px"
></iframe>
</header>
<Editor/>
</div>
</template>
<script>
import Editor from "./components/Editor";
export default {
name: "App",
components: {
Editor
}
};
</script>
<style>
#app {
font-family: "Avenir", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #2c3e50;
margin: 40px;
}
header {
align-items: center;
display: flex;
justify-content: space-between;
margin-bottom: 40px;
width: 100%;
}
</style>
Editor.vue
<template>
<el-tiptap :extensions="extensions" :content="content" placeholder="Write something ..."/>
</template>
<script>
import {
// all extensions
Doc,
Text,
Paragraph,
Heading,
Bold,
Italic,
Strike,
Underline,
Link,
Image,
Blockquote,
ListItem,
BulletList, // use with ListItem
OrderedList, // use with ListItem
TodoItem,
TodoList, // use with TodoItem
TextAlign,
Indent,
HorizontalRule,
HardBreak,
History
} from "element-tiptap";
import codemirror from "codemirror";
import "codemirror/lib/codemirror.css"; // import base style
import "codemirror/mode/xml/xml.js"; // language
import "codemirror/addon/selection/active-line.js"; // require active-line.js
import "codemirror/addon/edit/closetag.js"; // autoCloseTags
export default {
name: "Editor",
data: () => ({
extensions: [
new Doc(),
new Text(),
new Paragraph(),
new Heading({ level: 5 }),
new Bold({ bubble: true }),
new Underline({ bubble: true }),
new Italic({ bubble: true }),
new Strike({ bubble: true }),
new Link({ bubble: true }),
new Image(),
new Blockquote(),
new TextAlign(),
new ListItem(),
new BulletList({ bubble: true }),
new OrderedList({ bubble: true }),
new TodoItem(),
new TodoList(),
new Indent(),
new HardBreak(),
new HorizontalRule({ bubble: true }),
new Fullscreen(),
new CodeView({
codemirror,
codemirrorOptions: {
styleActiveLine: true,
autoCloseTags: true
}
}),
new History()
],
content: ``
})
};
</script>
main.js
import Vue from 'vue';
import App from './App.vue';
import ElementUI from 'element-ui';
import { ElementTiptapPlugin } from 'element-tiptap';
import 'element-tiptap/lib/index.css';
Vue.use(ElementUI);
Vue.use(ElementTiptapPlugin, {
// lang: "ko",
// spellcheck: false,
});
Vue.config.productionTip = false;
new Vue({
render: h => h(App)
}).$mount('#app');
И я хочу реализовать вышеуказанную функцию здесь.
editor.ejs
<html>
<head>
<script src="https://unpkg.com/vue/dist/vue.min.js"></script>
<style>
#app {
font-family: "Avenir", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #2c3e50;
margin: 40px;
}
header {
align-items: center;
display: flex;
justify-content: space-between;
margin-bottom: 40px;
width: 100%;
}
</style>
</head>
<body>
<div id="app">
<header>
<img
src="https://github.com/Leecason/element-tiptap/raw/master/examples/assets/logo_for_github.png?raw=true"
height="50"
class="logo"
>
<iframe
src="https://ghbtns.com/github-btn.html?user=Leecasonamp;repo=element-tiptapamp;type=staramp;count=true"
frameborder="0"
scrolling="0"
width="95"
height="20px"
></iframe>
</header>
<div>
<!-- I would like to use this part. -->
<el-tiptap :extensions="extensions" :content="content" placeholder="Write something ..."/>
</div>
</div>
</body>
<script>
//Something
</script>
</html>
Я хочу, чтобы это работало так
Как я должен это реализовать? Заранее благодарю вас за любезный ответ.
Комментарии:
1. Большинство библиотек в npm имеют доступные версии cdn. Просто найдите <имя_библиотеки> cdn, убедитесь, что он правильный, и используйте его. Если нужная вам библиотека является проектом Vue, вы также можете клонировать ее и использовать vue-cli для создания собственной версии, которую вы можете разместить самостоятельно. cli.vuejs.org/guide/build-targets.html
2. @Chirag Ravindra Подсказка по указанному выше адресу отличается от подсказки элемента. библиотека element-tiptap, похоже, не предоставляет CDN
3. вы правы. Вам нужен element-tiptap только в том случае, если вы уже используете element (включение элемента для использования tip-tap может быть излишним). Если он вам необходим, вы можете самостоятельно создать версию из кода, используя vue-cli. Кроме того, приведенные здесь примеры являются официальными примерами — это поможет нам понять вашу настройку, если вы можете поделиться своим кодом, который пытается воспроизвести этот сценарий минимально (например, в codepen или jsbin)
4. @Chirag Ravindra спасибо за ваш ответ. Могу ли я использовать vue с этим cdn в существующем html?