• 支持特性
    • 基本语法
    • 插值表达式
    • filter
    • slot
    • slot-scope
    • v-html
    • 事件
    • v-text

    支持特性

    基本语法

    支持 Vue 的基本模版语法,包括 v-for、v-if 等。

    1. <!-- v-if & v-for -->
    2. <div v-for="(item, i) in list">
    3. <div v-if="isEven(i)">{{ i }} - {{ item }}</div>
    4. </div>
    5. <!-- style & class -->
    6. <div :class="classObject"></div>
    7. <div :class="{ active: true }"></div>
    8. <div :class="[activeClass, errorClass]"></div>
    9. <div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
    10. <div :style="styleObject"></div>
    11. <div :style="[baseStyles, overridingStyles]"></div>

    注:class 暂时不能用在组件上

    插值表达式

    模版中的差值表达式支持写复杂的表达式、方法调用

    支持在模版中写复杂的表达式、和调用 methods 上的方法。

    1. <div>
    2. <div>{{ message.toUpperCase() }}</div>
    3. <div>{{ toUpperCase(message) }}</div>
    4. </div>

    filter

    支持 filter

    1. <div>
    2. <div>{{ message | toUpperCase }}</div>
    3. <div>{{ date | dateFormatter('yyyy-MM-dd') }}</div>
    4. </div>

    slot

    支持基本 slot 功能,包括具名 slot。

    1. <div>
    2. <Container>
    3. <Card>
    4. <div slot="head"> {{ title }} </div>
    5. <div> I'm body </div>
    6. <div slot="foot"> I'm footer </div>
    7. </Card>
    8. </Container>
    9. <div>

    注:暂不支持将 slot 一层层传递下去,例如

    CompA template:

    1. <div>
    2. <CompB>
    3. <slot></slot>
    4. </CompB>
    5. </div>

    CompB template:

    1. <div>
    2. <slot></slot>
    3. </div>

    page template:

    1. <div>
    2. <CompA>
    3. page title: {{ title }}
    4. </CompA>
    5. </div>

    目前 CompA 无法将从 page 接收到的 slot 片段传递给它的子组件 CompB。

    slot-scope

    支持 slot-scope。

    page template:

    1. <div>
    2. <CompA>
    3. <span slot-scope="scopeProps">{{ scopeProps.item }}</span>
    4. </CompA>
    5. </div>

    CompA template:

    1. <div v-for="(item, i) in list">
    2. {{ i }} - <slot :item="item"></slot>
    3. </div>

    v-html

    v-html 需要添加插件 @megalo/vhtml-plugin,并引入模版解析库 octoparse

    webpack 配置,指定解析库的路径、和名称。

    1. {
    2. // ...
    3. target: createMegaloTarget( {
    4. // ...
    5. htmlParse: {
    6. templateName: 'octoParse',
    7. src: _.resolve('./node_modules/octoparse/lib/platform/wechat')
    8. }
    9. } )
    10. }

    页面入口安装插件

    1. import Vue from 'vue'
    2. import VHtmlPlugin from '@megalo/vhtml-plugin'
    3. Vue.use(VHtmlPlugin)

    模版中使用

    1. <div v-html="'<h1>megalo</h1>'"></div>

    事件

    除了支持事件绑定以外,还支持部分修饰符

    1. <button @click="onClick"></button>

    支持修饰符:

    • stop,用小程序 catch 绑定事件实现,例如 @tap.stop => catchtap
    • capture,用小程序的 capture 绑定事件实现,例如 @tap.capture => capture-bind(支付宝小程序不支持)
    • self(实验),目前利用特定的 data-set 标记元素实现
    • once,模拟 removeListener 实现

    v-text

    1. <div v-text="'I am text'"></div>