骑猪看日出 發表於 2020-8-27 16:23:00

uni-app-条件注释

<p>官方文档</p>
<p>&nbsp;</p>
<pre data-lang="html"><code class="lang-html code"><span class="token comment">&lt;!--#ifdef<strong>%PLATFORM%</strong> --&gt;
平台特有的组件
<span class="token comment">&lt;!--#endif --&gt;</span></span></code></pre>
<p>示例,如下公众号关注组件仅会在微信小程序中出现:</p>
<pre data-lang="html"><code class="lang-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;view<span class="token punctuation">&gt;
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;view<span class="token punctuation">&gt;微信公众号关注组件<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/view<span class="token punctuation">&gt;
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;view<span class="token punctuation">&gt;
      <span class="token comment">&lt;!-- uni-app未封装,但可直接使用微信原生的official-account组件--&gt;
      <span class="token comment">&lt;!-- #ifdef MP-WEIXIN --&gt;
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;official-account<span class="token punctuation">&gt;<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/official-account<span class="token punctuation">&gt;
            <span class="token comment">&lt;!-- #endif --&gt;
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/view<span class="token punctuation">&gt;
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/view<span class="token punctuation">&gt;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h3 id="样式的条件编译">样式的条件编译</h3>
<pre data-lang="css"><code class="lang-css code"><span class="token comment">/*#ifdef<strong>%PLATFORM% </strong> */
平台特有样式
<span class="token comment">/*#endif*/</span></span></code></pre>
<p>注意:&nbsp;样式的条件编译,无论是 css 还是 sass/scss/less/stylus 等预编译语言中,必须使用&nbsp;<code>/*注释*/</code>&nbsp;的写法。</p>
<p>正确写法</p>
<p><img src="https://img-cdn-qiniu.dcloud.net.cn/uniapp/doc/img/platform-2.png"></p>
<p>错误写法</p>
<p><img src="https://img-cdn-qiniu.dcloud.net.cn/uniapp/doc/img/platform-3.png"></p>
<h3 id="pagesjson-的条件编译">pages.json 的条件编译</h3>
<p>下面的页面,只有运行至 App 时才会编译进去。</p>
<p><img src="https://img-cdn-qiniu.dcloud.net.cn/uniapp/doc/img/platform-4.png"></p>
<p>不同平台下的特有功能,以及小程序平台的分包,都可以通过 pages.json 的条件编译来更好地实现。这样,就不会在其它平台产生多余的资源,进而减小包体积。</p>
<p>json的条件编译,如不同平台的key名称相同,cli项目下开发者自己安装的校验器会报错,需自行关闭这些校验器对json相同key的校验规则。如果使用HBuilderX的校验器,无需在意此问题,HBuilderX的语法校验器为此优化过。</p>
<h3 id="static-目录的条件编译">static 目录的条件编译</h3>
<p>在不同平台,引用的静态资源可能也存在差异,通过 static 的的条件编译可以解决此问题,static 目录下新建不同平台的专有目录(目录名称同&nbsp;<code>%PLATFORM%</code>&nbsp;值域,但字母均为小写),专有目录下的静态资源只有在特定平台才会编译进去。</p>
<p>如以下目录结构,<code>a.png</code>&nbsp;只有在微信小程序平台才会编译进去,<code>b.png</code>&nbsp;在所有平台都会被编译。</p>
<pre data-lang="">    <code class="lang-">
┌─static               
│├─mp-weixin
││└─a.png   
│└─b.png
├─main.js      
├─App.vue      
├─manifest.json
└─pages.json   
    </code>
</pre>
<h3 id="整体目录条件编译">整体目录条件编译</h3>
<p>如果想把各平台的页面文件更彻底的分开,也可以在uni-app项目根目录创建<code>platforms</code>目录,然后在下面进一步创建<code>app-plus</code>、<code>mp-weixin</code>等子目录,存放不同平台的文件。</p>
<p>注意</p>
<ul>
<li><code>platforms</code>目录下只支持放置页面文件(即页面vue文件),如果需要对其他资源条件编译建议使用static 目录的条件编译</li>
</ul>
<h3 id="hbuilderx-支持">HBuilderX 支持</h3>
<p>HBuilderX 为&nbsp;<code>uni-app</code>&nbsp;的条件编译提供了丰富的支持:</p>
<p>代码块支持</p>
<p>在 HBuilderX 中开发&nbsp;<code>uni-app</code>&nbsp;时,通过输入&nbsp;ifdef&nbsp;可快速生成条件编译的代码片段</p>
<p><img src="https://img-cdn-qiniu.dcloud.net.cn/uniapp/doc/uni-022402.png"></p>
<p>语法高亮</p>
<p>在 HBuilderX 中对条件编译的代码注释部分提供了语法高亮,可分辨出写法是否正确,使得代码更加清晰(独立js文件需在编辑器右下角切换javascript es6+编辑器,独立css文件暂不支持高亮,但不高亮不影响使用)</p>
<p><img src="https://img-cdn-qiniu.dcloud.net.cn/uniapp/doc/uni-012403.png"></p>
<p>正确注释和快速选中</p>
<p>在 HBuilderX 中,ctrl+alt+/ 即可生成正确注释(js:<code>// 注释</code>、css:<code>/* 注释 */</code>、vue/nvue模板:&nbsp;<code>&lt;!-- 注释 --&gt;</code>)。</p>
<p><img src="https://img-cdn-qiniu.dcloud.net.cn/uniapp/doc/uni2019012801.png"></p>
<p>点击&nbsp;ifdef&nbsp;或&nbsp;endif&nbsp;可快速选中条件编译部分;点击左侧的折叠图标,可折叠条件编译部分代码。</p>
<p><img src="https://img-cdn-qiniu.dcloud.net.cn/uniapp/doc/uni-012501.png"></p>
<h3 id="注意">注意</h3>
<ul>
<li>Android 和 iOS 平台不支持通过条件编译来区分,如果需要区分 Android、iOS 平台,请通过调用 uni.getSystemInfo 来获取平台信息。支持<code>ifios</code>、<code>ifAndroid</code>代码块,可方便编写判断。</li>
<li>有些跨端工具可以提供js的条件编译或多态,但这对于实际开发远远不够。uni-app不止是处理js,任何代码都可以多端条件编译,才能真正解决实际项目的跨端问题。另外所谓多态在实际开发中会造成大量冗余代码,很不利于复用和维护。举例,微信小程序主题色是绿色,而百度支付宝小程序是蓝色,你的应用想分平台适配颜色,只有条件编译是代码量最低、最容易维护的。</li>
<li>有些公司的产品运营总是给不同平台提不同需求,但这不是拒绝uni-app的理由。关键在于项目里,复用的代码多还是个性的代码多,正常都是复用的代码多,所以仍然应该多端。而个性的代码放到不同平台的目录下,差异化维护。</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
    &lt;view&gt;
      &lt;button type=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">primary</span><span style="color: rgba(128, 0, 0, 1)">"</span> @click=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">upload</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;上传图片&lt;/button&gt;
      &lt;image v-<span style="color: rgba(0, 0, 255, 1)">for</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">item in img_arr</span><span style="color: rgba(128, 0, 0, 1)">"</span> :src=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(128, 0, 0, 1)">"</span> @click=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">preview(item)</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;&lt;/image&gt;
      &lt;!-- #ifdef H5 --&gt;
      &lt;view&gt;旨在h5&lt;/view&gt;
      &lt;!-- <span style="color: rgba(0, 0, 255, 1)">#endif</span> --&gt;
      &lt;!-- #ifdef MP-WEIXIN --&gt;
      &lt;view&gt;旨在小程序&lt;/view&gt;
      &lt;!-- <span style="color: rgba(0, 0, 255, 1)">#endif</span> --&gt;
      &lt;button @click=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">send</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;显示&lt;/button&gt;
    &lt;/view&gt;
&lt;/template&gt;

&lt;script&gt;<span style="color: rgba(0, 0, 0, 1)">
    export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
      data() {
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
                img_arr: []
            }
      },
      methods: {
            upload() {
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> let this_ = this</span>
<span style="color: rgba(0, 0, 0, 1)">                uni.chooseImage({
                  success: res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
                        </span><span style="color: rgba(0, 0, 255, 1)">this</span>.img_arr =<span style="color: rgba(0, 0, 0, 1)"> res.tempFilePaths
                        console.log(</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.img_arr)
                  }
                })
            },
            preview(current){
                uni.previewImage({
                  current,
                  urls:</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.img_arr,
                  indicator:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">number</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
                  loop:</span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
                  success() {
                        console.log(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">成功</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
                  }
                })
            },
            send(){
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> #ifdef H5</span>
                console.log(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">h5打印</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> #endif
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> #ifdef MP-WEIXIN</span>
                console.log(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">微信小程序</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> #endif</span>
<span style="color: rgba(0, 0, 0, 1)">            }
      }
    }
</span>&lt;/script&gt;

&lt;style&gt;</pre>
<p> /* #ifdef H5 */<br>        view{<br>                color: red;<br>        }<br>        /* #endif */<br>        /* #ifdef MP-WEIXIN */<br>        view{<br>                color: blue;<br>        }<br>        /* #endif */</p>
<pre>&lt;/style&gt;</pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/fwjlucifinil/p/13572147.html
頁: [1]
查看完整版本: uni-app-条件注释