uni-app-条件注释
<p>官方文档</p><p> </p>
<pre data-lang="html"><code class="lang-html code"><span class="token comment"><!--#ifdef<strong>%PLATFORM%</strong> -->
平台特有的组件
<span class="token comment"><!--#endif --></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"><view<span class="token punctuation">>
<span class="token tag"><span class="token tag"><span class="token punctuation"><view<span class="token punctuation">>微信公众号关注组件<span class="token tag"><span class="token tag"><span class="token punctuation"></view<span class="token punctuation">>
<span class="token tag"><span class="token tag"><span class="token punctuation"><view<span class="token punctuation">>
<span class="token comment"><!-- uni-app未封装,但可直接使用微信原生的official-account组件-->
<span class="token comment"><!-- #ifdef MP-WEIXIN -->
<span class="token tag"><span class="token tag"><span class="token punctuation"><official-account<span class="token punctuation">><span class="token tag"><span class="token tag"><span class="token punctuation"></official-account<span class="token punctuation">>
<span class="token comment"><!-- #endif -->
<span class="token tag"><span class="token tag"><span class="token punctuation"></view<span class="token punctuation">>
<span class="token tag"><span class="token tag"><span class="token punctuation"></view<span class="token punctuation">></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>注意: 样式的条件编译,无论是 css 还是 sass/scss/less/stylus 等预编译语言中,必须使用 <code>/*注释*/</code> 的写法。</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 目录下新建不同平台的专有目录(目录名称同 <code>%PLATFORM%</code> 值域,但字母均为小写),专有目录下的静态资源只有在特定平台才会编译进去。</p>
<p>如以下目录结构,<code>a.png</code> 只有在微信小程序平台才会编译进去,<code>b.png</code> 在所有平台都会被编译。</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 为 <code>uni-app</code> 的条件编译提供了丰富的支持:</p>
<p>代码块支持</p>
<p>在 HBuilderX 中开发 <code>uni-app</code> 时,通过输入 ifdef 可快速生成条件编译的代码片段</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模板: <code><!-- 注释 --></code>)。</p>
<p><img src="https://img-cdn-qiniu.dcloud.net.cn/uniapp/doc/uni2019012801.png"></p>
<p>点击 ifdef 或 endif 可快速选中条件编译部分;点击左侧的折叠图标,可折叠条件编译部分代码。</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><template>
<view>
<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>>上传图片</button>
<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>></image>
<!-- #ifdef H5 -->
<view>旨在h5</view>
<!-- <span style="color: rgba(0, 0, 255, 1)">#endif</span> -->
<!-- #ifdef MP-WEIXIN -->
<view>旨在小程序</view>
<!-- <span style="color: rgba(0, 0, 255, 1)">#endif</span> -->
<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>>显示</button>
</view>
</template>
<script><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>=><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></script>
<style></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></style></pre>
</div>
<p> </p><br><br>
来源:https://www.cnblogs.com/fwjlucifinil/p/13572147.html
頁:
[1]