zoukankan      html  css  js  c++  java
  • Vue 渲染函数

    Vue 推荐在绝大多数情况下使用模板来创建你的 HTML。然而在一些场景中,你真的需要 JavaScript 的完全编程的能力。这时你可以用渲染函数,它比模板更接近编译器。

    一 项目结构

    二 App组件

    <template>
      <div id="app">
        <fruit fruitName="Durian" :level="2">
          very  delicious!
        </fruit>
      </div>
    </template>
    
    <script>
    import "./components/Fruit.js";
    export default {
      name: "App"
    };
    </script>
    
    <style lang="scss">
    </style>

    三 Fruit组件

    import Vue from "vue";
    import Durian from "./Durian.vue";
    import Mongo from "./Mongo.vue";
    
    Vue.component("fruit", {
      props: {
        fruitName: {
          type: String,
          required: true
        },
        level: {
          type: Number,
          required: true
        }
      },
      data() {
        return {
          shop: "水果店"
        };
      },
      render(createElement) {
        const { fruitName, level, shop, $slots, nativeClickHandler } = this;
        const ele = fruitName === "Durian" ? Durian : Mongo;
        return createElement(
          ele,
          {
            class: {
              favorFruit: true
            },
            style: "color:gold;font-style:italic;",
            attrs: {
              id: "favorFruit"
            },
            nativeOn: {
              click: nativeClickHandler
            },
            scopedSlots: {
              shop(props) {
                return createElement("h6", shop);
              }
            }
          },
          [createElement("h" + level, fruitName), $slots.default]
        );
      },
      methods: {
        nativeClickHandler() {
          console.log("native click");
        }
      }
    });

    四 Durian组件

    <template>
        <div>
            <slot/>
            <slot name="shop"/>
        </div>
    </template>
    <script>
    export default {
      name: "Durian"
    };
    </script>

    五 Mongo组件

    <template>
        <div>
            <slot/>
            <slot name="shop"/>
        </div>
    </template>
    <script>
    export default {
      name: "Mango"
    };
    </script>

    六 运行效果

  • 相关阅读:
    AOP概述
    函数调用规定
    lexical scoping vs. dynamic scoping
    [C++]C++11新特性
    JavaScript Tutorial 05 #Class#
    JavaScript Tutorial 04 #Function#
    JavaScript Tutorial 03 #Array#
    JavaScript Tutorial 02 #Object#
    JavaScript Tutorial 01 #Basic#
    Win32 Thread Information Block
  • 原文地址:https://www.cnblogs.com/sea-breeze/p/11563545.html
Copyright © 2011-2022 走看看