<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[湖南长沙前端开发与培训－通途工作室 - VUE研究]]></title>
<link>http://blog.258754.cn/</link>
<description><![CDATA[前端开发,技术培训,动效研究,求职信息]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[dudu@258754.cn(嘟嘟)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>湖南长沙前端开发与培训－通途工作室</title>
	<url>http://blog.258754.cn/images/logos.gif</url>
	<link>http://blog.258754.cn/</link>
	<description>湖南长沙前端开发与培训－通途工作室</description>
</image>

			<item>
			<link>http://blog.258754.cn/article.asp?id=275</link>
			<title><![CDATA[vite2+vue2.6.12+vant2.12.12提速移动端开发]]></title>
			<author>dudu@258754.cn(admin)</author>
			<category><![CDATA[VUE研究]]></category>
			<pubDate>Fri,25 Jun 2021 23:12:53 +0800</pubDate>
			<guid>http://blog.258754.cn/default.asp?id=275</guid>
		<description><![CDATA[<p>&nbsp;<span style="color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">试着用网上的一个vite2的脚手架做了个移动端的尝试。vite最大的好处就是--真的快！也可能是我页面比较少，但是每次热更新，基本就是一存盘，浏览器就完成了变更，体验太好了。</span></p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">换新脚手架，要把所有常用配置都验证一下，并且把原来webpack中的选项都做到在vite中等价实现。</p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">包括：</p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">* px2rem的解决方案，在postcss.config.js中配置，转化为vw单位，比rem方式要先进点。</p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">* vant基础样式定义，在theme.less中。</p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">* lodash及moment全局引入，在/index.html中直接用&lt;script&gt;标签引入的，在vue文件中和.js中直接可用，但是在.ts文件中，如果不做import，会有红色的错误波浪线出现，但不影响使用。</p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">* import后缀为vue的组件时，必须带上vue后缀，但js/ts不用带后缀。</p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">* 有时候大的变化要CTRL+F5强制刷新页面，热更新才会生效。</p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">* 图片引入方式：</p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">&lt;img :src=&quot;require('@img/aaa.png')&quot; /&gt;</p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">background-image: url(&quot;@img/aaa.png&quot;);</p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">* 静态资源在/public目录下，在页面中用/images这样的路径引入即可。</p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">* webpack允许的require在此都不能用，要改为import。写法方面，@import &quot;~@/assets/less/_variable.less&quot; vite中要去掉~写成：@import &quot;@/assets/less/_variable.less&quot;;</p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">* 控制台过滤。vite会出现一些控制台输出，暂时没有配置方法屏蔽，折中办法，在控制台搜索框输入-vite,可以过滤掉这些输出。</p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">* 运行命令与环境变量。跟webpack略有不同。运行方式看package.json就知道了。环境变量可放在.env.development这样的文件中，跟webpack一致。在所有代码中输出import.meta.env，可以看到环境变量的所有。具体看文档。</p>
<p class="ztext-empty-paragraph" style="margin: -0.8em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">&nbsp;</p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">我本人对于vue3和ts不是很熟悉（学不动了），所以宁愿工作在vue2+js的环境中。在vite脚手架中，这两种方式是可以混用的。所以按自己合适的模式使用就行了。</p>
<p class="ztext-empty-paragraph" style="margin: -0.8em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">&nbsp;</p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;">放心去享受vite带来的快速体验吧！</p>
<p style="margin: 1.4em 0px; color: rgb(18, 18, 18); font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium;"><img src="http://blog.258754.cn/download.asp?id=143" alt="" /></p>]]></description>
		</item>
		
			<item>
			<link>http://blog.258754.cn/article.asp?id=268</link>
			<title><![CDATA[可拖拽生成节点的组织结构图-vue+svg+betterscroll+原生js-drag]]></title>
			<author>dudu@258754.cn(admin)</author>
			<category><![CDATA[VUE研究]]></category>
			<pubDate>Fri,30 Oct 2020 00:38:44 +0800</pubDate>
			<guid>http://blog.258754.cn/default.asp?id=268</guid>
		<description><![CDATA[<p>&nbsp;<img src="http://blog.258754.cn/download.asp?id=138" width="600" height="215" alt="" /></p>
<p>查看案例请点击此处：</p>
<div><font color="#0000ee"><span style="font-size: 18px;"><u><a href="http://258754.cn/2020/vue_demo/#/demo/dtree" target="_blank">http://258754.cn/2020/vue_demo/#/demo/dtree</a></u></span></font></div>
<div>&nbsp;</div>
<div>需要源码可联系站长本人。微信18975141930。</div>
<div>&nbsp;</div>
<div>使用的技术框架：</div>
<div>1、原生Svg用来画线</div>
<div>2、原生js拖动dragover、<span style="color: unset; font-family: unset; font-size: unset;">dragleave、</span><span style="color: unset; font-family: unset; font-size: unset;">drop行为</span></div>
<div><span style="color: unset; font-family: unset; font-size: unset;">3、betterscroll实现画布拖动</span></div>
<div><span style="color: unset; font-family: unset; font-size: unset;">4、整个底层由vue-cli3实现</span></div>
<div><span style="color: unset; font-family: unset; font-size: unset;"><br />
</span></div>
<div><span style="color: unset; font-family: unset; font-size: unset;">功能点：</span></div>
<div><span style="color: unset; font-family: unset; font-size: unset;">1、图形与数组双向互动。树节点有单击、右键单击、删除等行为，可通过console.log查看。</span></div>
<div><span style="color: unset; font-family: unset; font-size: unset;">2、左侧方案节点可以直接拖到右侧蓝色节点上，添加树节点</span></div>
<div><span style="color: unset; font-family: unset; font-size: unset;">3、树节点变化后，会自动调整画面宽、高，并重绘线条</span></div>
<div><span style="color: unset; font-family: unset; font-size: unset;">4、线条的柄长度、连接点位置，包括宽度、颜色，都已经用变量实现。</span></div>
<div>&nbsp;</div>
<div>这个案例主要是用来测试JS与SVG的结合、拖动行为的基础实现。到具体项目中，是将树结构打包为一个dtree.vue的组件，对外暴露行为。本例只是一个雏形雏形，有了这套理论，可以实现更复杂的东西。比如在页面上任何DOM对象之间都可以连线，画图形标记，是不是想想都有点小激动？</div>
<div>&nbsp;</div>
<p>&nbsp;顺便提一下，这种连线可以跟动画相结合，参见我的另一个小例子：</p>
<p>http://blog.258754.cn/2016/svg/test_svg_2019.html</p>
<p>VUE+TWEENMAX+SVG动画，用来模拟流程控制</p>]]></description>
		</item>
		
			<item>
			<link>http://blog.258754.cn/article.asp?id=258</link>
			<title><![CDATA[http-vue-loader插件让你无需使用webpack也能尝鲜.vue单文件组件]]></title>
			<author>dudu@258754.cn(admin)</author>
			<category><![CDATA[VUE研究]]></category>
			<pubDate>Sun,25 Mar 2018 17:27:26 +0800</pubDate>
			<guid>http://blog.258754.cn/default.asp?id=258</guid>
		<description><![CDATA[<p>目前利用&lt;script&gt;方式，不使用webpack的开发人员还很多，我之前一直不知道，可以绕过webpack，直接尝鲜.vue的单文件组件方式，直到发现了这个组件。目前我已经在多个项目中使用。</p>
<p>这个插件的用法在百度上基本搜不到。具体使用方式可以看这个中文文档：</p>
<p>https://kuro.tw/posts/2017/07/11/%E4%B8%8D%E9%9C%80%E7%B7%A8%E8%AD%AF%E4%B9%9F%E8%83%BD%E8%BC%89%E5%85%A5-vue-%E5%85%83%E4%BB%B6%E6%AA%94-%E4%BD%BF%E7%94%A8-http-vue-loader/</p>
<p>也可以直接看github官网文档：</p>
<p>https://github.com/FranckFreiburger/http-vue-loader</p>
<p>&nbsp;</p>
<p><span>
<div style="-en-clipboard:true;">另外，我按照官网方法配置scss语法支持，但我一直没有成功，老是报红色错误，在官网issue上看了，有人碰上同样错误，没有解决。</div>
<div><b>但我测试了LESS功能，是可以的</b>，所以我就使用LESS算了。配置如下：</div>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">src</span><span>=</span><span class="attribute-value">&quot;https://cdn.bootcdn.net/ajax/libs/less.js/4.1.2/less.min.js&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">src</span><span>=</span><span class="attribute-value">&quot;https://unpkg.com/http-vue-loader&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">src</span><span>=</span><span class="attribute-value">&quot;./js/common.js&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<div>&nbsp;</div>
</span></p>
<div class="codeText" style="width: 567.5px;">
<div class="codeHead">Javascri&#112;t代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span class="comment">//common.js</span>&nbsp;&nbsp;</li>
    <li><span class="keyword">function</span>&nbsp;less_init()&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;httpVueLoader.langProcessor.less&nbsp;=&nbsp;<span class="keyword">function</span>&nbsp;(lessText)&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span>&nbsp;<span class="keyword">new</span>&nbsp;Promise(<span class="keyword">function</span>&nbsp;(resolve,&nbsp;reject)&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;less.render(lessText,&nbsp;{},&nbsp;<span class="keyword">function</span>&nbsp;(err,&nbsp;css)&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span>&nbsp;(err)&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reject(err)&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">else</span>&nbsp;{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resolve(css.css);&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;</li>
    <li>less_init()&nbsp;&nbsp;</li>
    <li>&nbsp;</li>
</ol>
</div>
<div>&nbsp;</div>
<p><span>
<div>注意配置次序,less解释器必须在http-vue-loader初始化之后。</div>
</span></p>
<div style="-en-clipboard:true;">另外，官网上已经放出了最新的<strong><span style="color: unset; font-family: unset; font-size: unset;">vue3-sfc-loader</span></strong><span style="color: unset; font-family: unset; font-size: unset;">，我试用了一下，可支持vue3，也可以支持多层import语法。功能强大。</span></div>
<div style="-en-clipboard:true;"><span style="color: unset; font-family: unset; font-size: unset;">不过这种用法，不就跟vue-cli一样了么？不明白收益点在哪。</span></div>]]></description>
		</item>
		
			<item>
			<link>http://blog.258754.cn/article.asp?id=252</link>
			<title><![CDATA[vue“作用域插槽”来制作通用列表组件]]></title>
			<author>dudu@258754.cn(admin)</author>
			<category><![CDATA[VUE研究]]></category>
			<pubDate>Wed,13 Dec 2017 22:48:24 +0800</pubDate>
			<guid>http://blog.258754.cn/default.asp?id=252</guid>
		<description><![CDATA[<p>&nbsp;&ldquo;作用域插槽&rdquo;的官方定义是：<span style="line-height: 1.45;">作用域插槽是一种特殊类型的插槽，用作一个 (能被传递数据的) 可重用模板，来代替已经渲染好的元素。</span><span style="line-height: 1.45;">这VUE2.5提供的新功能，经我亲自测试，在2.2版本中并不好用。建议直接升到2.5。</span></p>
<p>官网文档地址：<a href="https://cn.vuejs.org/v2/guide/components.html#作用域插槽" target="_blank">https://cn.vuejs.org/v2/guide/components.html#作用域插槽</a></p>
<div>典型运用就是列表。比如，在项目中有几种列表，他们除了item的格式不同，其它逻辑都类似，比如有类似的数据读取方式，有相同的页码逻辑，是否能写一个通用的组件，来加载这些列表，<span style="font-weight: bold;">而不是写成多个列表组件？</span><span style="line-height: 1.45;">用作用域插槽实现如下。</span></div>
<div>&nbsp;</div>
<div>父页面：</div>
<div style="box-sizing: border-box; padding: 8px; border-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);">
<div><span style="font-size: 9pt; color: rgb(51, 51, 51); font-family: Monaco;">&lt;infi data=&quot;/daily_work&quot; class=&quot;infi1&quot;&gt;</span></div>
<div><span style="font-size: 9pt; color: rgb(51, 51, 51); font-family: Monaco;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;li slot=&quot;item&quot; slot-scope=&quot;props&quot;&gt;</span></div>
<div><span style="font-size: 9pt; color: rgb(51, 51, 51); font-family: Monaco;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;span&gt;{{ props.cont.pid }}&lt;/span&gt;</span></div>
<div><span style="font-size: 9pt; color: rgb(51, 51, 51); font-family: Monaco;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;span&gt;{{ props.cont.tit }}&lt;/span&gt;</span></div>
<div><span style="font-size: 9pt; color: rgb(51, 51, 51); font-family: Monaco;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/li&gt;</span></div>
<div><span style="font-size: 9pt; color: rgb(51, 51, 51); font-family: Monaco;">&lt;/infi&gt;</span></div>
</div>
<div>props仅为一个变量，用来接收子组件传递过来的参数。</div>
<div>&nbsp;</div>
<div>组件模板这样写：</div>
<div style="box-sizing: border-box; padding: 8px; border-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);">
<div><span style="font-size: 9pt; color: rgb(51, 51, 51); font-family: Monaco;">&lt;ul class=&quot;list&quot;&gt;</span></div>
<div><span style="font-size: 9pt; color: rgb(51, 51, 51); font-family: Monaco;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;slot v-for=&quot;(item,index) in list&quot;</span></div>
<div><span style="font-size: 9pt; color: rgb(51, 51, 51); font-family: Monaco;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name=&quot;item&quot;</span></div>
<div><span style="font-size: 9pt; color: rgb(51, 51, 51); font-family: Monaco;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cont=&quot;item&quot;&gt;</span></div>
<div><span style="font-size: 9pt; color: rgb(51, 51, 51); font-family: Monaco;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/slot&gt;</span></div>
<div><span style="font-size: 9pt; color: rgb(51, 51, 51); font-family: Monaco;">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/ul&gt;</span></div>
</div>
<div>这样，把父组件中的一个&lt;li&gt;做为slot插槽放入子组件中，子组件的结构实际是由插槽提供的。</div>
<div>而子组件则负责列表的公有行为，比如&lt;ul&gt;&ldquo;外壳&rdquo;，用ajax获取数据，组织循环，甚至还要组织上滑滚动功能。</div>
<div>这样的组件，才称之为&ldquo;灵活&rdquo;！</div>]]></description>
		</item>
		
			<item>
			<link>http://blog.258754.cn/article.asp?id=251</link>
			<title><![CDATA[vue+tweenmax实现手风琴导航效果]]></title>
			<author>dudu@258754.cn(admin)</author>
			<category><![CDATA[VUE研究]]></category>
			<pubDate>Tue,14 Nov 2017 10:28:27 +0800</pubDate>
			<guid>http://blog.258754.cn/default.asp?id=251</guid>
		<description><![CDATA[<p>vue不擅长处理dom变化，因此常用的手风琴伸缩效果，不太好实现。顺手挂了个tweenmax实现了。107K的插件库。</p>
<p>其实用jquery也可以,jq的体积更小。</p>
<p>demo:</p>
<p>http://blog.258754.cn/2017/demo_vue_accordion.html</p>]]></description>
		</item>
		
			<item>
			<link>http://blog.258754.cn/article.asp?id=250</link>
			<title><![CDATA[用VUE+localstorage+lodash.js实现购物车本地存储]]></title>
			<author>dudu@258754.cn(admin)</author>
			<category><![CDATA[VUE研究]]></category>
			<pubDate>Thu,12 Oct 2017 01:11:23 +0800</pubDate>
			<guid>http://blog.258754.cn/default.asp?id=250</guid>
		<description><![CDATA[<p>在任何一个购物页面，只要购买了商品，就可以将购买量存储到缓存，实现跨页面共享数据。这个原理也可以用来管理其它较复杂的跨页面结构。</p>
<p>demo地址：</p>
<div><a href="http://258754.cn/2017/jyg/shop.html">http://258754.cn/2017/jyg/shop.html</a></div>
<div><a href="http://258754.cn/2017/jyg/sku_detail.html?id=1" style="line-height: 1.45;">http://258754.cn/2017/jyg/sku_detail.html?id=1</a></div>
<div>&nbsp;</div>
<div>几个技术要点：</div>
<ul>
    <li><span style="line-height: 1.45;">使用</span><a href="https://github.com/julien-maurel/js-storage" style="line-height: 1.45;">js-storage</a><span style="line-height: 1.45;">这个js库来实现对localstorage的读写及判断，比自己写原生要简单。因为localstorage默认存储是字符形式，如果要存储对象、数据这些，还要自己写转换，用库就简单得多了。另外还用isEmpty对&ldquo;空结构&rdquo;做判断。</span></li>
    <li><span style="line-height: 1.45;">基于VUE做了一个单独的mixin_cart，要引入购物车的页面都可以使用这个mixin</span></li>
    <li><span style="line-height: 1.45;">用一个数据结构(cart)来完整的映射&ldquo;购物车&rdquo;,针对它写了一些API:</span></li>
</ul>
<ul>
    <ul>
        <li><span style="line-height: 1.45;">init_cart----从local读数据来形成cart</span></li>
        <li><span style="line-height: 1.45;">get_cart_item_count----得到某件商品的购买量</span></li>
        <li>write_cart------新建/改写商品数据</li>
        <li>sum_cart-------汇总购买量</li>
        <li>clear_cart------待加</li>
    </ul>
    <li>使用watch监听页面中的数据变化，一旦发生变化，就扫描数据结构，把购买量的变化使用write_cart映射到cart--&gt;并存储到localstorage。注意watch监听数组或是对象这样的复杂结构，要使用handler+deep: true写法。</li>
    <li>一些算法使用了lodash.js，比如：
    <ul>
        <li>查找符合条件的商品-- _.find</li>
        <li>从数组中删除商品---_.pull</li>
        <li>汇总商品购买量------_.sumBy</li>
    </ul>
    </li>
</ul>]]></description>
		</item>
		
			<item>
			<link>http://blog.258754.cn/article.asp?id=249</link>
			<title><![CDATA[VUE中用refs实现父子通讯的新方法]]></title>
			<author>dudu@258754.cn(admin)</author>
			<category><![CDATA[VUE研究]]></category>
			<pubDate>Sat,30 Sep 2017 16:27:30 +0800</pubDate>
			<guid>http://blog.258754.cn/default.asp?id=249</guid>
		<description><![CDATA[<p>例子：http://258754.cn/2017/read2/test_component.html&nbsp;</p>
<div>用refs父子通讯的新方法，比用emit要方便。主要思路是用refs去读取子组件的内部值，调用内部函数。之前真不知道可以这样用，直到我读到这篇文章--Vue.js 组件样式指南（英文）：</div>
<div>https://github.com/pablohpsilva/vuejs-component-style-guide</div>]]></description>
		</item>
		
			<item>
			<link>http://blog.258754.cn/article.asp?id=248</link>
			<title><![CDATA[近期VUE及周边笔记--YDUI框架]]></title>
			<author>dudu@258754.cn(admin)</author>
			<category><![CDATA[VUE研究]]></category>
			<pubDate>Sun,24 Sep 2017 09:18:50 +0800</pubDate>
			<guid>http://blog.258754.cn/default.asp?id=248</guid>
		<description><![CDATA[<p>&nbsp;YDUI是基于vue2.0的一个功能齐全的UI框架，就我个人的应用范围来说，比element ui更适合我的需要。可能他的组件配置并没有ele那么强大而齐全，但是简练的风格反而更适合于中小移动端项目。</p>
<p>我主要使用这些组件：</p>
<ul>
    <li>flexible组件，用于rem-px单位转换，默认单位是10，好转脑子。</li>
    <li>弹窗，只有几个参数，适用于不复杂的情况。</li>
    <li>日期选择器，weui风格的，从底部向上弹出。</li>
    <li>滚动加载（yd-infinitescroll）</li>
    <li>数字动画 （CountUp）</li>
</ul>
<p>其它的一些组件，别的库中也有，或是可以自己手写出来，并不是完全依赖。</p>
<p>要注意的事及BUG：</p>
<p>1、这个库的版本更新很快，如果发现参数无效等奇怪的情况，请先检查版本。比如yd-infinitescroll的不同版本写法就不一样。</p>
<p>2、flexible组件，对于窗口宽度的变化是有范围的。</p>
<div class="codeText">
<div class="codeHead">Javascri&#112;t代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="comment">//ydui.flexible.js，以下的11.2会在宽420像素以上停止变化，改为21.2后，会在768像素以上才停</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span><span class="keyword">return</span><span>&nbsp;n.style.fontSize&nbsp;=&nbsp;5&nbsp;*&nbsp;Math.max(Math.min(t&nbsp;/&nbsp;750&nbsp;*&nbsp;20,&nbsp;21.2),&nbsp;8.55)&nbsp;+&nbsp;</span><span class="string">&quot;px&quot;</span><span>,&nbsp;e&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>3、ydui中把所有的链接都渲染为&quot;router-link&quot;的解决办法。查找ydui.js，把所有的&quot;router-link&quot;改为&quot;a&quot;</p>
<p>把所有的attrs:{to:改为attrs:{href:</p>
<div>4、一些bug可以到ydui的github去查找issue，说不定会有意外收获。</div>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://blog.258754.cn/article.asp?id=247</link>
			<title><![CDATA[近期VUE及周边笔记--easy mock]]></title>
			<author>dudu@258754.cn(admin)</author>
			<category><![CDATA[VUE研究]]></category>
			<pubDate>Sun,24 Sep 2017 08:53:29 +0800</pubDate>
			<guid>http://blog.258754.cn/default.asp?id=247</guid>
		<description><![CDATA[<p>easy mock(https://easy-mock.com/)平台的主要作用，是用来模拟生成json文件，在后端未到位的情况下，为前端调试提供数据。我的使用方法：</p>
<p>1、是在开发时将ajax请求，直接指向https://easy-mock.com/mock/59a578f77b7ac306cc2fa863/api这样的远程接口，进行调试。</p>
<p>2、等前后端联调结束后，通过修改axios的axios.defaults.baseURL参数，将数据接口指向真实ajax地址，完成切换。</p>
<p>easy平台提供了丰富的mock.js语法，也可以接收并request参数，模拟真实ajax情况很逼真。比如下面这个范式，就模拟了对&rdquo;/list?page=*&ldquo;这样的多页请求的情况：</p>
<div class="codeText">
<div class="codeHead">Javascri&#112;t代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span>{&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;res_body:&nbsp;<span class="keyword">function</span><span>({&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;_req,&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;Mock&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;})&nbsp;{&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//page小于3，每页给出20个随机数据</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(_req.query.page&nbsp;&lt;&nbsp;3)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;Mock.mock({&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;page_num&quot;</span><span>:&nbsp;4,&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;list|20&quot;</span><span>:&nbsp;[{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;id&quot;</span><span>:&nbsp;_req.query.page,&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;tt_amount&quot;</span><span>:&nbsp;</span><span class="string">&quot;@float(200,&nbsp;2000,&nbsp;2,&nbsp;2)&quot;</span><span>,&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;commission&quot;</span><span>:&nbsp;</span><span class="string">&quot;@float(200,&nbsp;2000,&nbsp;2,&nbsp;2)&quot;</span><span>,&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;final_amount&quot;</span><span>:&nbsp;</span><span class="string">&quot;@float(200,&nbsp;2000,&nbsp;2,&nbsp;2)&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}]&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//page==3，给出6个数据，模拟末页情况</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(_req.query.page&nbsp;==&nbsp;3)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;Mock.mock({&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;page_num&quot;</span><span>:&nbsp;4,&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;list|6&quot;</span><span>:&nbsp;[{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;id&quot;</span><span>:&nbsp;_req.query.page,&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;tt_amount&quot;</span><span>:&nbsp;</span><span class="string">&quot;@float(200,&nbsp;2000,&nbsp;2,&nbsp;2)&quot;</span><span>,&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;commission&quot;</span><span>:&nbsp;</span><span class="string">&quot;@float(200,&nbsp;2000,&nbsp;2,&nbsp;2)&quot;</span><span>,&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;final_amount&quot;</span><span>:&nbsp;</span><span class="string">&quot;@float(200,&nbsp;2000,&nbsp;2,&nbsp;2)&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}]&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;模拟身份验证</p>
<div class="codeText">
<div class="codeHead">Javascri&#112;t代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span>{&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;res_flag:&nbsp;<span class="keyword">function</span><span>({&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;_req&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;})&nbsp;{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;(_req.header.token&nbsp;==&nbsp;</span><span class="string">&quot;1234567890&quot;</span><span>)?</span><span class="keyword">true</span><span>:</span><span class="keyword">false</span><span>;&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://blog.258754.cn/article.asp?id=246</link>
			<title><![CDATA[近期VUE及周边笔记--axios]]></title>
			<author>dudu@258754.cn(admin)</author>
			<category><![CDATA[VUE研究]]></category>
			<pubDate>Sun,24 Sep 2017 08:27:35 +0800</pubDate>
			<guid>http://blog.258754.cn/default.asp?id=246</guid>
		<description><![CDATA[<p>我将ajax工具栈从vue-resource改为了axios，基本用法类似，但调用格式略有不同。比如vue-resource的response是放在res.body中，而axios放在了res.data中。</p>
<p>值得一提的是，axios的全局设置很方便，包括参数和拦截器。列举：</p>
<div class="codeText">
<div class="codeHead">Javascri&#112;t代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="comment">//&nbsp;全局基地址配置</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>axios.defaults.baseURL&nbsp;=&nbsp;<span class="string">'https://easy-mock.com/mock/59a578f77b7ac306cc2fa863/api'</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span><span class="comment">//&nbsp;全局token</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>axios.defaults.headers&nbsp;=&nbsp;{token:&nbsp;window.localStorage.getItem(<span class="string">&quot;jyg_token&quot;</span><span>)};&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">//&nbsp;添加全局请求拦截器</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>axios.interceptors.request.use(<span class="keyword">function</span><span>&nbsp;(config)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="comment">//&nbsp;给每个发出的请求后面加上php后缀</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;config.url&nbsp;=&nbsp;config.url&nbsp;+&nbsp;<span class="string">&quot;php&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;config;&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;},&nbsp;<span class="keyword">function</span><span>&nbsp;(error)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="comment">//&nbsp;对请求错误做些什么</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;Promise.reject(error);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;});&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">//&nbsp;添加响应拦截器，比如对所有错误代码进行全局统一的出错处理</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>axios.interceptors.response.use(<span class="keyword">function</span><span>&nbsp;(response)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="comment">//&nbsp;对响应数据做点什么</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;response;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;},&nbsp;<span class="keyword">function</span><span>&nbsp;(error)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;<span class="comment">//&nbsp;对响应错误做点什么</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;Promise.reject(error);&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;});&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>]]></description>
		</item>
		
</channel>
</rss>
