uniapp 电商app 富文本框的使用——添加图文功能

99 篇文章 87 订阅
订阅专栏

uniapp 富文本框的使用

在这里插入图片描述
uniapp中是有富文本框组件的。

uniapp中的富文本框组件的使用官网链接:https://uniapp.dcloud.io/component/editor?id=editor
在这里插入图片描述
在这里插入图片描述
官网富文本框的展示部分:(下面红框框住的菜单含义如下:)

  1. B 加粗
  2. I 斜体
  3. U 下划线
  4. 居中
  5. 靠右
  6. 字体
  7. 撤回
  8. 反撤回
  9. 添加横线
  10. 图片
    在这里插入图片描述

结构部分:

<editor id="editor" class="ql-container" :placeholder="placeholder" @ready="onEditorReady"></editor>

代码部分:

 export default {
    data() {
        return {
            placeholder: '开始输入...'
        }
    },
    methods: {
        onEditorReady() {
            uni.createSelectorQuery().select('#editor').context((res) => {
                this.editorCtx = res.context
            }).exec()
        },
        undo() {
            this.editorCtx.undo()
        }
    }
}

最上面图片的展示代码如下:

textarea 多行文本组件的使用——标题与副标题部分

<textarea v-model="detail.title" placeholder="添加标题" auto-height placeholder-class="grey"/>

v-model绑定的是多行文本的内容,placeholder是提示信息,auto-height是根据内容自动高度增加,placeholder-class是提示信息的样式类名

picker 选择组件的使用——文章分类的使用

<picker @change="bindPickerChange" :value="index" :range="array">
	<view class="uni-input">{{array[index]}}</view>
</picker>

index 文章分类数组的索引,range文章分类的数组,此数组的格式是字符串的数组,如果接口返回的数据不合适,则需要通过for循环遍历进行数组重构。

image 组件——封面图片的上传

uniapp 提供了上传图片的api;
在这里插入图片描述
在这里插入图片描述
uniapp 官网提供的上传图片的示例如下:

uni.chooseImage({
    count: 6, //默认9
    sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
    sourceType: ['album'], //从相册选择
    success: function (res) {
        console.log(JSON.stringify(res.tempFilePaths));
    }
});

在上传完图片后,可以通过阿里OSS进行本地图片转化为网络图片,然后通过uniapp.uploadFile的方法将网络图片获取到。

具体代码如下所示:

async chooseImage(type) {
	let _this = this;
	uni.chooseImage({
		count: 1, //最多可以选择的图片张数,默认9
		sizeType: ['original', 'compressed'], //original 原图,compressed 压缩图,默认二者都有
		sourceType: ['album', 'camera'], //album 从相册选图,camera 使用相机,默认二者都有
		success: (respone) => {
			_this.$request.urlRequest(
				'/gate/oss/token', {},
				'GET',
				(res) => {
					if (res.code == 200) {
					let data = res.result;
					let env = {
						uploadImageUrl: 'https://58d.oss-cn-hangzhou.aliyuncs.com/', // 默认存在根目录,可根据需求改
						AccessKeySecret: data.AccessKeySecret, // AccessKeySecret 去你的阿里云上控制台上找
						OSSAccessKeyId: data.AccessKeyId, // AccessKeyId 去你的阿里云上控制台上找
						stsToken: data.SecurityToken,
						timeout: 87600 //这个是上传文件时Policy的失效时间
					}
					let dir = 'images/';
					let filePath = respone.tempFilePaths[0];
					const aliyunFileKey = dir + new Date().getTime() + Math.floor(Math.random() * 150) + '.png';
					const aliyunServerURL = env.uploadImageUrl; //OSS地址,需要https
					const accessid = env.OSSAccessKeyId;
					const policyBase64 = _this.getPolicyBase64(env);
					const signature = _this.getSignature(policyBase64, env); //获取签名
					const stsToken = env.stsToken;
	
					let param = {
						'key': aliyunFileKey,
						'policy': policyBase64,
						'OSSAccessKeyId': accessid,
						'signature': signature,
						'success_action_status': '200',
						'x-oss-security-token': stsToken,
						'stsToken': stsToken,
					};
	
					uni.uploadFile({
						url: "https://58d.oss-cn-hangzhou.aliyuncs.com/", //开发者服务器 url
						filePath: filePath, //要上传文件资源的路径
						name: 'file', //必须填file
						formData: param,
						success: (res) => {
							if(type){
								_this.detail.imageUrl = aliyunServerURL + aliyunFileKey;
								return;
							}
							_this.editorCtx.insertImage({
								src: aliyunServerURL + aliyunFileKey, // 此处需要将图片地址切换成服务器返回的真实图片地址
								alt: '图片',
								width:"320upx",// 此处可以对图片进行尺寸的限制,否则页面中的图片会展示不全
								mode:'widthFix',
								success: function(e) {}
							});
						},
						fail: (err) => {
							// _this.msg.push(JSON.stringify(err));
							// err.wxaddinfo = aliyunServerURL;
							// failc(err);
						},
					})
				}
			}
		)
	}
});

editor 富文本框组件的使用——添加图文部分

<editor class="ql-container"  :placeholder="placeholder" :show-img-size="true" :show-img-toolbar="true"
 :show-img-resize="true" @ready="onEditorReady" id="editor" @statuschange="statuschange" @focus="editFocus" @blur="editBlur"
 ref="editot"></editor>
<view class="tool-view" >
	<view class="tool">
		<jinIcon class="single" type="&#xe6f3;" font-size="44upx" title="插入图片" @click="chooseImage"></jinIcon>
		<jinIcon class="single" type="&#xe6f9;" font-size="44upx" title="修改文字样式" @click="showMore" :color="showMoreTool ? activeColor : '#666666'"></jinIcon>
		<jinIcon class="single" type="&#xe6eb;" font-size="44upx" title="分割线" @click="insertDivider"></jinIcon>
		<jinIcon class="single" type="&#xe6e8;" font-size="44upx" title="撤销" @click="undo"></jinIcon>
		<jinIcon class="single" type="&#xe705;" font-size="44upx" title="重做" @click="redo"></jinIcon>
		<jinIcon class="single" type="提交" font-size="40upx" title="设置" @click="showSetting"></jinIcon>
	</view>
	<!-- 文字相关操作 -->
	<view class="font-more" v-if="showMoreTool">
		<jinIcon class="single" type="&#xe6e7;" font-size="44upx" title="加粗" @click="setBold" :color="showBold ? activeColor : '#666666'"></jinIcon>
		<jinIcon class="single" type="&#xe6fe;" font-size="44upx" title="斜体" @click="setItalic" :color="showItalic ? activeColor : '#666666'"></jinIcon>
		<jinIcon class="single" type="&#xe6f8;" font-size="44upx" title="分割线" @click="setIns" :color="showIns ? activeColor : '#666666'"></jinIcon>
		<jinIcon class="single" type="&#xe6e3;" font-size="44upx" title="标题" @click="setHeader" :color="showHeader ? activeColor : '#666666'"></jinIcon>
		<jinIcon class="single" type="&#xe6f1;" font-size="44upx" title="居中" @click="setCenter" :color="showCenter ? activeColor : '#666666'"></jinIcon>
		<jinIcon class="single" type="&#xe6ed;" font-size="44upx" title="居右" @click="setRight" :color="showRight ? activeColor : '#666666'"></jinIcon>
	</view>
</view>

style样式如下:

.ql-container {
	line-height: 160%;
	font-size: 34upx;
	width: 100%;
	height:calc(100vh - 450upx);
	overflow-y: auto;
	margin: 20upx auto;
	// position: relative;
	// top:0;
	border:2upx solid #bbb;
	padding:20upx 30upx;
	box-sizing: border-box;
	// padding-bottom:600upx;
}

.tool-view {
	width: 100vw;
	position: fixed;
	bottom: 0;
	left: 0;
}

.tool {
	height: 100upx;
	display: flex;
	align-items: center;
	justify-content: space-around;
	width: 100%;
	background: #eee;
}

.font-more {
	position: absolute;
	left: 0;
	height:100upx;
	bottom: 100upx;
	display: flex;
	align-items: center;
	justify-content: space-around;
	width: 100%;
	background: rgb(235, 235, 235);
	overflow: hidden;
	transition: all 0.15s;
}

.setting-layer {
	position: absolute;
	bottom: 100upx;
	background: #fff;
	width: 250upx;
	right: 20upx;
	box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
	border-radius: 8upx;
}

.setting-layer .single {
	height: 80upx;
	font-size: 32upx;
	padding: 0 30upx;
	display: flex;
	align-items: center;
	line-height: 80upx;
	flex-direction: row;
	color: #666;
}

.setting-layer .single .icon {
	margin-right: 20upx;
}

.setting-layer-mask {
	position: fixed;
	left: 0;
	top: 0;
	width: 100vw;
	height: 100vh;
	background: transparent;
}

在这里插入图片描述
script部分代码:

data({
	return{
		showMoreTool: false,
		showBold: false,
		showItalic: false,
		showIns: false,
		showHeader: false,
		showCenter: false,
		showRight: false,
		showSettingLayer: false,
		activeColor: '#F56C6C',
		screenHeight:"",
		keyboardFlag:false,
	}
}),
onLoad(options){
	  this.iosFlag = (uni.getSystemInfoSync().platform=='ios');//判断当前环境为安卓或IOS
	 this.screenHeight = uni.getSystemInfoSync().windowHeight;//获取当前环境的高度
	 this.getList();//获取文章分类的数据
	 if(options && options.id){ // 根据链接中的id获取内容,这个是修改或展示图文的时候需要调用的接口
		 this.id = options.id;
		 this.getDetail(options.id);
	 }
},
onBackPress(options) {
	//监听页面的返回按键   
	let _this = this;
    if (options.from === 'backbutton' && !_this.id) {
		this.editorCtx.getContents({ // 通过这个方法可以获取富文本框中的内容
			success: (data)=> {
				this.richText = data;
			}
		})  
		// 下面的if判断,如果标题/副标题/封面图/富文本框内容只要是有一个有内容的,则需要进行弹窗提示是否保存为草稿
		if(_this.richText || _this.detail.title || _this.detail.secondTitle || _this.detail.imageUrl){
			uni.showModal({
			    title: '是否保存为草稿?',
			    content: '',
				confirmText: "保存草稿",
				confirmColor: "#FF7424",
			    success: res=> {
			        if (res.confirm) {
			           this.$request.urlRequest( // 调用保存草稿的接口
			               "/goods/Academy/saveDraft", 
			           	{
			           		academyCategoryId:this.dataList[this.index].id,
			           		essay:this.richText.html,
			           		imageUrl:this.detail.imageUrl,
			           		secondTitle:this.detail.secondTitle,
			           		title:this.detail.title
			           	},
			               'post',
			               (res)=> {
			           		console.log(res);
			           		if(res.code==200){
			           			uni.showToast({
			           				title:"草稿保存成功"
			           			})
			           			setTimeout(()=>{
			           				uni.redirectTo({
			           					url:"/pages/school/articleList?status=1"
			           				})
			           				// 在监听页面返回的功能中,只有遇到了return true才算是返回成功
									return true;
			           			},1500)
			           		}
			           	})
			        }else{
						uni.navigateBack();
						return true;
					}
			    }
			});
			 return true;
		}
		uni.navigateBack();
      return true;
    }
},
methods:{
	// 监听富文本框组件的准备工作
	onEditorReady(e) {
		uni.createSelectorQuery()
			.in(this)
			.select('.ql-container')
			.fields({
				size: true,
				context: true
			}, res => {
				this.editorCtx = res.context;
				this.editorCtx.setContents({
					html: this.detail.essay
				})
			})
			.exec();
	},
	// 富文本框组件的重做
	undo() {
		this.editorCtx.undo();
	},
	// 插入图片
	async chooseImage(type) {
		let _this = this;
		console.log(_this.editorCtx);
		uni.chooseImage({
			count: 1, //最多可以选择的图片张数,默认9
			sizeType: ['original', 'compressed'], //original 原图,compressed 压缩图,默认二者都有
			sourceType: ['album', 'camera'], //album 从相册选图,camera 使用相机,默认二者都有
			success: (respone) => {
				_this.$request.urlRequest(
					'/gate/oss/token', {},
					'GET',
					(res) => {
						if (res.code == 200) {
						let data = res.result;
						let env = {
							uploadImageUrl: 'https://58d.oss-cn-hangzhou.aliyuncs.com/', // 默认存在根目录,可根据需求改
							AccessKeySecret: data.AccessKeySecret, // AccessKeySecret 去你的阿里云上控制台上找
							OSSAccessKeyId: data.AccessKeyId, // AccessKeyId 去你的阿里云上控制台上找
							stsToken: data.SecurityToken,
							timeout: 87600 //这个是上传文件时Policy的失效时间
						}
						let dir = 'images/';
						let filePath = respone.tempFilePaths[0];
						const aliyunFileKey = dir + new Date().getTime() + Math.floor(Math.random() * 150) + '.png';
						const aliyunServerURL = env.uploadImageUrl; //OSS地址,需要https
						const accessid = env.OSSAccessKeyId;
						const policyBase64 = _this.getPolicyBase64(env);
						const signature = _this.getSignature(policyBase64, env); //获取签名
						const stsToken = env.stsToken;

						let param = {
							'key': aliyunFileKey,
							'policy': policyBase64,
							'OSSAccessKeyId': accessid,
							'signature': signature,
							'success_action_status': '200',
							'x-oss-security-token': stsToken,
							'stsToken': stsToken,
						};

						uni.uploadFile({
							url: "https://58d.oss-cn-hangzhou.aliyuncs.com/", //开发者服务器 url
							filePath: filePath, //要上传文件资源的路径
							name: 'file', //必须填file
							formData: param,
							success: (res) => {
								if(type){
									_this.detail.imageUrl = aliyunServerURL + aliyunFileKey;
									return;
								}
								_this.editorCtx.insertImage({
									src: aliyunServerURL + aliyunFileKey, // 此处需要将图片地址切换成服务器返回的真实图片地址
									alt: '图片',
									width:"320upx",
									mode:'widthFix',
									success: function(e) {}
								});
							},
							fail: (err) => {
								// _this.msg.push(JSON.stringify(err));
								// err.wxaddinfo = aliyunServerURL;
								// failc(err);
							},
						})
					}
				}
			)
		}
	});
},
// 阿里OSS存储的格式转化
getSignature(policyBase64, env) {
	const accesskey = env.AccessKeySecret;
	const bytes = Crypto.HMAC(Crypto.SHA1, policyBase64, accesskey, {
		asBytes: true
	});
	const signature = Crypto.util.bytesToBase64(bytes);
	return signature;
},
getPolicyBase64(env) {
	let date = new Date();
	date.setHours(date.getHours() + env.timeout);
	let srcT = date.toISOString();
	const policyText = {
		"expiration": srcT, //设置该Policy的失效时间,超过这个失效时间之后,就没有办法通过这个policy上传文件了
		"conditions": [
			["content-length-range", 0, 5 * 1024 * 1024] // 设置上传文件的大小限制,5mb
		]
	};
	const policyBase64 = base64.encode(JSON.stringify(policyText));
	return policyBase64;
},
// 富文本框组件插入分割线
insertDivider() {
	this.editorCtx.insertDivider();
},
redo() {
	this.editorCtx.redo();
},
// 富文本框组件菜单显示更多
showMore() {
	this.showMoreTool = !this.showMoreTool;
	this.editorCtx.setContents()
},
// 富文本框内容加粗
setBold() {
	this.showBold = !this.showBold;
	this.editorCtx.format('bold');
},
// 富文本框内容斜体展示
setItalic() {
	this.showItalic = !this.showItalic;
	this.editorCtx.format('italic');
},
// 富文本框组件检测状态
checkStatus(name, detail, obj) {
	if (detail.hasOwnProperty(name)) {
		this[obj] = true;
	} else {
		this[obj] = false;
	}
},
// 富文本框组件菜单的改变
statuschange(e) {
	var detail = e.detail;
	this.checkStatus('bold', detail, 'showBold');
	this.checkStatus('italic', detail, 'showItalic');
	this.checkStatus('ins', detail, 'showIns');
	this.checkStatus('header', detail, 'showHeader');
	if (detail.hasOwnProperty('align')) {
		if (detail.align == 'center') {
			this.showCenter = true;
			this.showRight = false;
		} else if (detail.align == 'right') {
			this.showCenter = false;
			this.showRight = true;
		} else {
			this.showCenter = false;
			this.showRight = false;
		}
	} else {
		this.showCenter = false;
		this.showRight = false;
	}
},
// 富文本框
setIns() {
	this.showIns = !this.showIns;
	this.editorCtx.format('ins');
},
// 富文本框组件将文字变成标题文字
setHeader() {
	this.showHeader = !this.showHeader;
	this.editorCtx.format('header', this.showHeader ? 'H2' : false);
},
// 富文本框组件内容居中展示
setCenter() {
	this.showCenter = !this.showCenter;
	this.editorCtx.format('align', this.showCenter ? 'center' : false);
},
// 富文本框组件内容靠右展示
setRight() {
	this.showRight = !this.showRight;
	this.editorCtx.format('align', this.showRight ? 'right' : false);
},
// 获取文章分类的接口调用
getList(){
	this.$request.urlRequest(
	    "/goods/AcademyCategory/list", 
		{},
	    'get',
	    (res)=> {
			if(res.code==200){
				if(!res.result){
					return;
				}
				this.dataList = res.result;
				this.dataList.forEach(item=>{
					this.array.push(item.academyCategoryName);
				})
			}
		}
	)
},
// 提交信息
showSetting() {
	if(!this.detail.title || !this.detail.imageUrl){
		uni.showToast({
			title:"请补全信息",
			icon:"none"
		})
		return;
	}
	// #ifdef APP-PLUS
	this.editorCtx.getContents({
		success: (data)=> {  
			this.richText = data;
			uni.showModal({
				title: '确定提交吗?',
				content: '提交后将进入审核阶段',
				confirmText: "确定提交",
				confirmColor: "#FF7424",
				success: res=> {
					if (res.confirm) {
						if(this.id){
							this.$request.urlRequest(
							    "/goods/Academy/reEditAcademy", 
								{
									id:this.id,
									academyCategoryId:this.dataList[this.index].id,
									essay:this.richText.html,
									imageUrl:this.detail.imageUrl,
									secondTitle:this.detail.secondTitle,
									title:this.detail.title
								},
							    'post',
							    (res)=> {
									console.log(res);
									if(res.code==200){
										uni.showToast({
											title:"提交成功"
										})
										setTimeout(()=>{
											uni.redirectTo({
												url:"/pages/school/articleList?status=2"
											})
										},1500)
									}
								}
							)
						}else{
							this.$request.urlRequest(
							    "/goods/Academy/publishAcademy", 
								{
									academyCategoryId:this.dataList[this.index].id,
									essay:this.richText.html,
									imageUrl:this.detail.imageUrl,
									secondTitle:this.detail.secondTitle,
									title:this.detail.title
								},
							    'post',
							    (res)=> {
									console.log(res);
									if(res.code==200){
										uni.showToast({
											title:"提交成功"
										})
										setTimeout(()=>{
											uni.redirectTo({
												url:"/pages/school/articleList?status=2"
											})
										},1500)
									}
								}
							)
						}
					} 
				}
			});
		}  
	})  
	// #endif
},
	// 富文本框组件添加光标
	async editFocus() {
		this.keyboardFlag = true;
	},
	// 富文本框组件移除光标
	editBlur() {
		this.keyboardFlag = false;
	},
	release(isPublic) {
		this.showSettingLayer = false;
		this.editorCtx.getContents({
			success: res => {
				Object.assign(res, {
					isPublic: isPublic
				})
				this.$emit('editOk', res);
			}
		})
	},
}
}

jinIcon的组件

引入 import jinIcon from ‘./jin-icons.vue’;

注册 components: {jinIcon},

组件的内容如下:

<template>
	<view class="content">
		<view class="icon" :style="{color: color, fontSize: fontSize}" v-html="type" @click="toclick"></view>
	</view>
</template>

<script>
	export default {
		props: {
			type: {
				type: String,
				default: '&#xe644;'
			},
			color: {
				type: String,
				default: '#666666'
			},
			fontSize: {
				type: String,
				default: '34rpx'
			}
		},
		methods: {
			toclick() {
				this.$emit('click');
			}
		}
	}
</script>

<style scoped>
	.content{
		display: flex;
		align-items: center;
		justify-content: center;
	}
	@font-face {
		font-family: 'jin';
		/** 阿里巴巴矢量图标库的字体库地址,可以替换自己的字体库地址 **/
		src: url('https://at.alicdn.com/t/font_1491431_6m7ltjo8wi.ttf') format('truetype');
	}

	.icon {
		font-family: jin !important;
		font-size: 34rpx;
	}

</style>

Uniapp功能富文本编辑组件 可多端使用 H5插入
09-18
功能富文本编辑,可多端使用 H5插入,无需UniCloud。
uview 商城中的 使用uniapp开发的一整套电商app的源码
03-03
uview 商城中的 使用uniapp开发的一整套电商app的源码 uniapp开发 开源 app源码 电商app
uni-app 自定义组件展示html富文本内容,可实现富文本html内容中 图片展示、视频播放、音频播放。
06-10
uni-app 富文本内容利用html2json转换成对应类似控件 rich-text 对应的数组资源格式后进行展示的自定义组件、可以进行富文本html内容中 图片展示、视频播放、音频播放。
uniapp editer富文本使用,直接使用
xiaoLP1的博客
08-18 3401
1.html部分 <view class="page-body"> <view class='wrapper' style="border:1px solid rgb(229, 229, 229);"> <view class='toolbar' style="border:1px solid rgb(229, 229, 229);"> <i @click="format" class="iconfont icon-zitijiacu"
uniapp 富文本图片变形或者太大
最新发布
m0_70716007的博客
03-28 289
uniapp 富文本图片变形或者太大显示不全
uniapp实现微信小程序富文本之mp-html插件详解
CSDN_Admin0的博客
01-15 3129
uniapp实现微信小程序中富文本展示,微信小程序中图片自适应调整,微信小程序集成mp-html富文本
uniapp富文本编辑器使用
m0_49083276的博客
01-04 894
【代码】uniapp富文本使用
如何基于uni-app的editor开发一个简单的富文本编辑器
花儿为何这样红
07-09 6187
近期做的一个项目中,需要能够让用户在移动端进行富文本编辑。但翻遍全网也没找到一个合适的组件,要么太重、要么又重又老。所以自己基于uni-app的editor组件二开一个简单的富文本编辑器。
Uni-App使用RichText组件实现富文本内容展示教程
码奴一只猿
06-10 1万+
在Uni-App开发中,我们经常需要展示富文本内容,例如带有HTML标签的文字、图片、链接等。Uni-App提供了强大的RichText组件,可以轻松实现富文本内容的展示。本教程将向您展示如何使用RichText组件来创建内容丰的界面。
mp-html (小程序富文本组件)
热门推荐
code
04-10 1万+
功能介绍 支持在多个主流的小程序平台和uni-app使用 支持丰的标签(包括table、video、svg等) 支持丰的事件效果(自动预览图片、链接处理等) 支持设置占位图(加载中、出错时、预览时) 支持锚点跳转、长按复制等丰功能 支持大部分html实体 丰的插件(关键词搜索、内容编辑等) 效率高、容错性强且轻量化(≈24.5KB,9KB gzipped) 查看功能介绍了解更多 使用方法 原生平台 npm方式 在项目目录下安装组件包 ...
uniapp 完美解析富文本
weixin_47284756的博客
03-15 5660
uniapp 完美解析富文本 1.首先我们把解析富文本的js文件引入到页面里 并且定义一个值接收遍历后的文本(我们这里起一个名字叫demoHtml) var graceRichText = require("../../static/richText.js"); /* graceUI rich-text 加强工具 */ // 正则变量 var graceRichTextReg; // 批量替换的样式 [ 根据项目需求自行设置 ] var GRT = [ // div 样式 ['div', "l
uniapp展示富文本
Q_Q104926的博客
01-24 8283
uniapp展示富文本闲言安装 mp-html 闲言 以前vue展示HTML时候使用v-html就可以了,但是在 uniapp 中,部分可以展示,比如支付宝中就不行,在 uniapp使用的是 “<rich-text>”,但是效果并不是很理想,有时候也不是很好。 <template> <view class="content"> <rich-text :nodes="content"></rich-text> </view>
uni-app富文本渲染方案rich-text、uparse、v-html简单解析
叶落无痕的博客
10-12 6930
1、rich-text有很大弊端(不支持富文本内点击事件),若富文本里有可点击事件,则不推荐使用2、v-html在小程序中不支持。若项目不包含小程序,则推荐使用v-html。(记得使用v3编译器,2.7.5版本+的HBuildX已默认使用v3编译,无需自定义设置)3、uparse全端支持,但不支持nvue。若项目包含app,小程序,则推荐使用uparse。然后在nvue页面另行使用rich-text即可。
前端uniapp表情插件
05-09
前端uniapp表情插件
关于电商APP的视觉设计研究——以手机淘宝为例.pdf
08-26
关于电商APP的视觉设计研究——以手机淘宝为例.pdf
uni-app 富文本编辑 回显富文本和修改富文本
11-21
uni-app 富文本编辑 回显富文本和修改富文本!uni-app 富文本编辑 回显富文本和修改富文本!uni-app 富文本编辑 回显富文本和修改富文本!uni-app 富文本编辑 回显富文本和修改富文本!uni-app 富文本编辑 回显...
uniapp 打包App 电商源码
06-01
uniapp 源码全,直接可以访问购买和下载,需要后端源码及后台可以私信
uniapp - editor 富文本使用
每天都要努力学习哦~~
01-27 2216
标签增加属性 data-local,delta 格式内容中图片 attributes 属性增加 data-local 字段,该值为传入的临时文件地址。富文本组件内部引入了一些基本的样式使得内容可以正确的展示,开发时可以进行覆盖。需要注意的是,在其它组件或环境中使用富文本组件导出的html时,需要额外引入。从技术本质来讲,这个组件仍然运行在视图层webview中,利用的也是浏览器的。第二参数是方法的回调函数,参数是指定的相关节点信息。(初始时,选择器仅选取页面范围的节点,不会选取任何自定义组件中的节点)。
uniapp解析富文本(包含图片)微信小程序+app可用
我的笔记
04-03 1万+
最终效果图: 1、uniapp中,在需要使用vue界面中 <template> <view class="box"> <view class="title">{{title}}</view> <rich-text :nodes="content" class="content"></rich-text> </view> </template> <script> ex.
uniapp——uniapp如何打包成安卓——自有证书
07-27
要将Uniapp打包成安卓应用并使用自有证书,可以按照以下步骤进行操作: 1. 在打包配置选项界面中选择Android作为目标平台,并选择使用自有证书。\[1\] 2. 如果你或者公司已经申请了证书,可以选择使用自有证书。如果没有,可以选择使用公测证书,用于测试目的。一般来说,广告等内容不需要添加。选择快速打包即可。\[1\] 3. 等待打包完成后,在控制台中会出现打包成功的提示。点击打开所在目录,你将会看到刚刚生成的apk文件。你可以进行自测,也可以将其发送给他人进行安装。如果要安装到手机上,可以通过将手机与电脑连接,然后右键apk文件,选择安装到手机。这样就可以在手机上安装并查看你编写的APP了。\[2\] 4. 生成自有证书的步骤如下: - 打开命令行工具,使用keytool -genkey命令生成证书。例如,使用以下命令生成证书: ``` keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore ``` 其中,testalias是后面在HBuilder上要填写的证书别名,test.keystore是后面在HBuilder上要填写的证书文件,test可以根据需要进行修改,36500表示证书的有效时间为100年,单位为天,可以根据需要进行调整。自己输入的密钥库口令是后面在HBuilder上要填写的证书私钥密码(例如123456)。\[3\] - 根据提示输入相关信息即可完成证书生成。 希望以上信息对你有所帮助! #### 引用[.reference_title] - *1* *2* [【uniapp小程序】—— APP项目云打包(安卓)](https://blog.csdn.net/qq_49002903/article/details/126937483)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [uniapp-打包安卓app(如何生成证书)](https://blog.csdn.net/qq_36738092/article/details/130644632)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • uview——uniapp最优秀的UI框架 63175
  • vue环境变量配置——process.env(详细) 39252
  • 联想小新笔记本充不上电——客服提供的处理办法(已解决) 33453
  • element-ui实现table表格的嵌套(table表格嵌套)功能实现 31910
  • vue——实现组织架构图(vue-org-tree)——技能提升 31698

分类专栏

  • http-vue-loader 1篇
  • javascript知识点 156篇
  • js必会知识点 195篇
  • npm插件 8篇
  • 前端基础知识 284篇
  • vue报错记录 4篇
  • element-ui的使用 82篇
  • vue基础知识 132篇
  • formBuilder 1篇
  • antd 57篇
  • node报错 4篇
  • vue3+vite+antd 15篇
  • vue3+antd+vite 16篇
  • p-limit 1篇
  • 打印效果 1篇
  • css基础知识 7篇
  • css技巧 18篇
  • axois 7篇
  • vue拖拽排序 2篇
  • 表格拖拽排序 1篇
  • 拖拽 1篇
  • echarts 21篇
  • antv/x6 2篇
  • vue技能提升 24篇
  • uniapp 2篇
  • uniapp电商app开发 99篇
  • npm i报错 2篇
  • 生活小技巧 2篇
  • webpack 4篇
  • uniapp-editor 1篇
  • ant-design 16篇
  • vue报错 13篇
  • js基础 3篇
  • vue 26篇
  • ios app 构建版本 1篇
  • js正则表达式校验 2篇
  • ES6 5篇
  • vue3 2篇
  • 动态菜单 1篇
  • vue自定义指令 3篇
  • table滚动加载更多 1篇
  • 滚动加载更多指令 1篇
  • 图片或数据可视区域懒加载 1篇
  • 组织架构图zm-tree-org 1篇
  • vue拖拽上传 1篇
  • elementPlus 1篇
  • vue3+elementPlus+vite 1篇
  • 第三方API 3篇
  • vue打包浏览器缓存问题 1篇
  • pinia 2篇
  • apicloud 8篇
  • git命令集合 11篇
  • 前端基础知识-css 6篇
  • git 1篇
  • 双向数据绑定 1篇
  • fetch 2篇
  • layui 2篇
  • vue-admin-template 1篇
  • 正则表达式 7篇
  • 国际化 1篇
  • 中国+世界地图 1篇
  • js 1篇
  • relationn-graph 1篇
  • vue插件关系图 1篇
  • 关系图 1篇
  • 自定义指令 1篇
  • relation-graph 1篇
  • javascript 1篇
  • table合并单元格 1篇
  • a-tooltip样式设置 1篇
  • github.com 1篇
  • hosts文件修改 1篇
  • typescript 3篇
  • vue+vite+elementPlus 1篇
  • 数据请求 1篇
  • element ui 表单设计及代码生成器 1篇
  • 组件间事件触发 3篇
  • vscode的使用 1篇
  • layer.open传参 1篇
  • babel 1篇
  • es2020 1篇
  • xwScanner扫码 1篇
  • 二维码条形码 1篇
  • eslint 1篇
  • 富文本框wangEditor 1篇
  • webstorm软件使用
  • UI
  • 程序员脱单
  • 打包上传 2篇
  • 通用组件 1篇
  • local storage 1篇
  • 安装mysql 1篇
  • fullpage 1篇
  • request封装 1篇
  • web浏览器兼容性 1篇
  • jq翻页插件 1篇
  • gulp构建qq音乐播放器配置文件 1篇
  • gulp
  • 自动构建工具 1篇

最新评论

  • vue+elementUi——实现层叠轮播图——技能提升

    叶浩成520: http://t.csdnimg.cn/MvGH1 用这个吧,我后来用的这个

  • vue+elementUi——实现层叠轮播图——技能提升

    qq_36422854: 正需要这个样式轮播,swiper上的这样的轮播加上按钮点击有问题,不好解决

  • 富文本编辑器——UEditor的使用——基础积累

    xjf18250534957: 请问一下你CDN的文件地址在哪里,百度富文本Ueditor1.4.2的

  • uniapp——实现二维码生成+保存二维码图片——基础积累

    qq_53615229: 你好,remake函数显示not a function,请问是什么原因

  • vue插件——网站点击量热力图功能实现——技能提升

    weixin_68768710: 求代码中sortBy函数

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • cdn引入vue的项目嵌入vue组件——http-vue-loader 的使用——技能提升
  • JSON格式化输出html——数组+对象+JSON字符串+汉字——基础积累——@pgrabovets/json-view
  • JSON格式化输出到页面上——数组+对象+JSON字符串+汉字——基础积累
2024
05月 10篇
04月 14篇
03月 3篇
02月 4篇
01月 10篇
2023年119篇
2022年117篇
2021年197篇
2020年181篇

目录

目录

分类专栏

目录

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶浩成520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司四平网站关键词优化哪家好本溪网站优化按天扣费报价肇庆seo网站推广推荐楚雄网站优化按天收费公司上海网站优化价格遂宁seo优化推荐周口seo排名公司那曲网站制作价格银川建设网站价格莱芜关键词按天计费推荐山南百度网站优化排名价格贵阳模板网站建设公司杭州品牌网站设计推荐延边外贸网站建设公司河池品牌网站设计中山阿里店铺运营推荐南山关键词按天计费哪家好玉树百度标王推荐大连网站制作设计报价曲靖网站制作设计公司云浮关键词按天收费多少钱南山网站优化按天扣费杭州至尊标王哪家好怀化网站开发阜阳网站改版推荐娄底网站改版报价阜新网站改版多少钱荆门企业网站制作公司苏州模板网站建设价格沈阳网站优化排名多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化