解析字段

{
	a: 'http://...',
	b: '<html>...</html>'
}
/**
 * @description:解析html
 */
export default {
	data () {
		return {
			//解析后的对象
			htmlModel:{}
		};
	},
	methods: {
		/**
		 * @description:解析html
		 * @param data:需要解析的对象
		 * @param args:指定解析的key
		 */
		resolver (data, ...args) {
			let htmlModel = Object.assign({}, data);
			let requestArray = [];
			//判断是否是指定解析
			if (args.length > 0) {
				args.forEach((item, index) => {
					if (data[item] && this.isHttp(data[item])) {
						requestArray.push(item);
						this.requestHtml(data[item], htmlModel, item, args);
					} else if (data[item]) {
						//写入数据
						htmlModel[item] = data[item];
						this.call(htmlModel, args);
					} else {
						this.call(htmlModel, args);
					}
				});
			//按照正常解析
			} else {
				for (let key in data) {
					if (data[key] && this.isHttp(data[key])) {
						requestArray.push(key);
						this.requestHtml(data[key], htmlModel, key);
					} else {
						//写入数据
						htmlModel[key] = data[key];
						this.call(htmlModel);
					}
				}
			}
		},
	/**
	* @description:防止属性值为URL的数据未请求回来
	* @param data:需要解析的对象
	* @param args:指定解析的key
	*/
    call (htmlModel, args) {
      let callMap = {};
      if (args && args.length > 0) {
        callMap = Object.assign({}, htmlModel);
        for (let i = 0; i < args.length; i++) {
          if (this.isHttp(callMap[args[i]])) {
            callMap[args[i]] = '';
          }
        }
        this.parseSuccess(callMap);
      } else {
        for (let key in htmlModel) {
          if (!this.isHttp(htmlModel[key])) {
            callMap[key] = htmlModel[key];
          } else {
            callMap[key] = '';
          }
        }
        this.parseSuccess(callMap);
      }
    },
		/**
		 * @description:执行axios请求
		 * @param requestUrl:请求的url
		 * @return Promise
		 */
		requestHtml (requestUrl, htmlModel, key, args) {
			let $this = this;
			/* eslint-disable no-undef */
			return axios({
				method:'GET',
				url:requestUrl
			}).then(response => {
				htmlModel[key] = response.data;
				$this.call(htmlModel, args);
			}).catch(e => {
				$this.call(htmlModel, args);
			});
		},

		/**
		 * @description:判断是否是http/https请求
		 * @param str:需要校验的字符串
		 * @returns Boolean
		 */
		isHttp (str) {
			let regex = /^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?$/;
			return regex.test(str);
		}
	}
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值