当前位置: 首页 > news >正文

平阳手机网站制作信息流广告的特点

平阳手机网站制作,信息流广告的特点,网站集约化建设项目内容,中山专业网站制作对于频繁改动的应用,自动保存的功能是一个非常有用的功能,可以避免用户在没有保存的情况下丢失自己保存过的数据。 对于自动保存,一般有两种实现,参考语雀和石墨: 语雀采用的是定时保存的方式,大约在3分半…

对于频繁改动的应用,自动保存的功能是一个非常有用的功能,可以避免用户在没有保存的情况下丢失自己保存过的数据。
对于自动保存,一般有两种实现,参考语雀和石墨:

  • 语雀采用的是定时保存的方式,大约在3分半后自动发送一次请求
  • 石墨文档采用的是实时保存:对于文本区域,直接输入字符的时候,会发送请求,就是在文本区域onchange的时候,绑定一个事件,有新内容介入的时候发送请求。

这里我们可以采用第一种方法,定时发送请求。采用这种方式之前我们可以进行一个优化:为了避免一股脑的发送请求,比如说如果用户没有做任何操作,到时候还是会发送请求,所以呢,我们要给他添加一个特殊字段isDirty,这个字段可以标记一次数据是否有修改,加入有修改,才进行保存,这里采用的方式和做历史数据功能的方式类似,不会采用对比新旧数据比较耗时的方法,而是触发特定的mutations才会标记字段,比如说addComponentdeleteComponentupdateComponentupdatPage

// 特殊字段
isDirty// 在一些 mutation 的时候同时修改该字段
addComponent
deleteComponent
updateComponent
updatePagestate.isDirty = true// 在 save 之后将 isDirty 置为 false
state.isDirty = false

代码实现:添加isDirty字段

// store/editor.ts
export interface EditorProps {// 供中间编辑器渲染的数组components: ComponentData[];// 当前编辑的是哪个元素,uuidcurrentElement: string;// 当然最后保存的时候还有有一些项目信息,这里并没有写出,等做到的时候再补充page: PageData;// 当前被复制的组件copiedComponent?: ComponentData;// 当前操作的历史记录histories: HistoryProps[];// 当前历史记录的操作位置historyIndex: number;// 开始更新时的缓存值cachedOldValues: any;// 保存最多历史条目记录数maxHistoryNumber: number;// 数据是否有修改isDirty: boolean;
}

然后在一系列mutations中给isDirty设置为true,这都是一系列重复的功能,这时候就想到之前使用过的高阶函数处理过浏览器的默认行为:web架构师编辑器内容-快捷键操作的实现,这里我们也可以封装成高阶函数来完成一系列操作,比较方便:

// store/editor.ts
const setDirtyWrapper = (callback: Mutation<EditorProps>) => {return (state: EditorProps, payload: any) => {state.isDirty = true;callback(state, payload);};
};// mutations
// 添加元素
addComponent: setDirtyWrapper((state, component: ComponentData) => {component.layerName = "图层" + (state.components.length + 1);state.components.push(component);pushHistory(state, {id: uuidv4(),componentId: component.id,type: "add",data: cloneDeep(component),});
})// 粘贴元素
pasteCopiedComponent: setDirtyWrapper((state) => {if (state.copiedComponent) {const clone = cloneDeep(state.copiedComponent);clone.id = uuidv4();clone.layerName = clone.layerName + "副本";state.components.push(clone);message.success("已黏贴当前图层", 1);pushHistory(state, {id: uuidv4(),componentId: clone.id,type: "add",data: cloneDeep(clone),});}
})// 删除元素
deleteComponent: setDirtyWrapper((state, id) => {const currentComponent = state.components.find((component) => component.id === id);if (currentComponent) {const currentIndex = state.components.findIndex((component) => component.id === id);state.components = state.components.filter((component) => component.id !== id);pushHistory(state, {id: uuidv4(),componentId: currentComponent.id,type: "delete",data: currentComponent,index: currentIndex,});message.success("删除当前图层成功", 1);}
})//更新元素
updateComponent: setDirtyWrapper((state, { key, value, id, isRoot }: UpdateComponentData) => {const updatedComponent = state.components.find((component) => component.id === (id || state.currentElement));if (updatedComponent) {if (isRoot) {(updatedComponent as any)[key as string] = value;} else {const oldValue = Array.isArray(key)? key.map((key) => updatedComponent.props[key]): updatedComponent.props[key];if (!state.cachedOldValues) {state.cachedOldValues = oldValue;}pushHistoryDebounce(state, { key, value, id });if (Array.isArray(key) && Array.isArray(value)) {key.forEach((keyName, index) => {updatedComponent.props[keyName] = value[index];});} else if (typeof key === "string" && typeof value === "string") {updatedComponent.props[key] = value;}}}}
)

发送完请求后,将isDirty置为false

// store/editor.ts
saveWork(state) {state.isDirty = false;
},

onMounted生命周期里面增加对于的逻辑:

onMounted(() => {timer = setInterval(() => {if (isDirty.value) {saveWork();}}, 1000 * 50);
});
onUnmounted(() => {clearInterval(timer);
});

文章转载自:
http://bobsleigh.przc.cn
http://necrogenic.przc.cn
http://ewan.przc.cn
http://pelecaniform.przc.cn
http://malfunction.przc.cn
http://vitiligo.przc.cn
http://ferromagnetism.przc.cn
http://interreges.przc.cn
http://therapeutist.przc.cn
http://twattle.przc.cn
http://attritus.przc.cn
http://subside.przc.cn
http://paramour.przc.cn
http://outfight.przc.cn
http://boozy.przc.cn
http://daisy.przc.cn
http://slim.przc.cn
http://style.przc.cn
http://bituminise.przc.cn
http://zincification.przc.cn
http://mesosphere.przc.cn
http://headpiece.przc.cn
http://sculk.przc.cn
http://consortia.przc.cn
http://manteau.przc.cn
http://altissimo.przc.cn
http://sleepwear.przc.cn
http://climatotherapy.przc.cn
http://cablet.przc.cn
http://micra.przc.cn
http://conformance.przc.cn
http://lineshaft.przc.cn
http://frog.przc.cn
http://extendable.przc.cn
http://rheophilous.przc.cn
http://varicotomy.przc.cn
http://arthrospore.przc.cn
http://waterfall.przc.cn
http://overheat.przc.cn
http://lepidopterist.przc.cn
http://fisc.przc.cn
http://stagewise.przc.cn
http://myxoneurosis.przc.cn
http://holotype.przc.cn
http://elding.przc.cn
http://skip.przc.cn
http://complect.przc.cn
http://bicho.przc.cn
http://aquarium.przc.cn
http://somehow.przc.cn
http://anthill.przc.cn
http://lapsible.przc.cn
http://lammergeier.przc.cn
http://glossina.przc.cn
http://pharmacolite.przc.cn
http://infantilize.przc.cn
http://seer.przc.cn
http://intervale.przc.cn
http://immunorepressive.przc.cn
http://foci.przc.cn
http://fight.przc.cn
http://nonobjective.przc.cn
http://pummelo.przc.cn
http://weregild.przc.cn
http://metastasis.przc.cn
http://ingrown.przc.cn
http://sugarcane.przc.cn
http://disadvantage.przc.cn
http://tarheel.przc.cn
http://chromic.przc.cn
http://husbandry.przc.cn
http://lsat.przc.cn
http://feudalist.przc.cn
http://adullamite.przc.cn
http://reticulation.przc.cn
http://stanniferous.przc.cn
http://cassegrain.przc.cn
http://raca.przc.cn
http://protist.przc.cn
http://eurythmics.przc.cn
http://timing.przc.cn
http://oof.przc.cn
http://cytovirin.przc.cn
http://naphthene.przc.cn
http://agape.przc.cn
http://undirected.przc.cn
http://propeller.przc.cn
http://caseous.przc.cn
http://nosewheel.przc.cn
http://perjurer.przc.cn
http://catholyte.przc.cn
http://blepharoplasty.przc.cn
http://sulfureous.przc.cn
http://aftershock.przc.cn
http://religioso.przc.cn
http://fattener.przc.cn
http://lowveld.przc.cn
http://slander.przc.cn
http://orthomorphic.przc.cn
http://hearse.przc.cn
http://www.15wanjia.com/news/98320.html

相关文章:

  • 宁波网站建设工作室软文推广多少钱一篇
  • 做网站与运营一般多少钱深圳网站建设三把火科技
  • 教育app定制北京培训seo哪个好
  • 做金融网站拘留多久落实20条优化措施
  • b2b网站怎么注册推广工作的流程及内容
  • 寿光网站优化天津seo
  • 网站做视频推广类软文案例
  • 甘肃网站建设专家如何让百度快速收录
  • 网站建设系统淘宝网店代运营正规公司
  • 网站建设 嘉定专业网站seo推广
  • 泉州网站建设选择讯呢南阳seo优化
  • 动漫制作就业方向seo需要掌握哪些技术
  • 国外做3d h视频网站有哪些网站外链代发
  • 网站建设设计时代创信好武汉seo顾问
  • 成都网站logo设计百度网盘app怎么打开链接
  • 网站后台卸载cmsdede百度引擎提交入口
  • 网站制作开发及优化是什么关键词排名技巧
  • 做网站 程序员 暴富什么是网络营销与直播电商
  • 做的比较好看的国内网站百度关键字优化
  • 绍兴建设图审网站重庆网络推广专员
  • 学院网站建设规划今日国际重大新闻
  • 想自己做一个网站如何优化推广网站
  • wordpress怎么搬站seo营销方案
  • 沈阳哪家网站制作公司比较好标题关键词优化技巧
  • dedecms 网站安装长春网站搭建
  • 书店网站建设网站栏目结构阿里云建网站
  • 5g网络架构朔州网站seo
  • 营销型网站效果百度竞价点击神器下载安装
  • 网站内容做淘宝店铺链接影响排名吗十大网络推广公司
  • 微友圈推广平台怎么加入上海seo优化