zoukankan      html  css  js  c++  java
  • [js]vue组件核心

    element table自定义col

    一时没理解elment的自定义字段, 因此在此对组件作用域插槽做了一番探索

    <template>
      <el-table :data="list" style=" 100%;padding-top: 15px;">
        <el-table-column label="Order_No" min-width="200">
          <template slot-scope="scope">
            {{ scope.row.order_no | orderNoFilter }}
          </template>
        </el-table-column>
        <el-table-column label="Price" width="195" align="center">
          <template slot-scope="scope">
            ¥{{ scope.row.price | toThousandFilter }}
          </template>
        </el-table-column>
        <el-table-column label="Status" width="100" align="center">
          <template slot-scope="{row}">
            <el-tag :type="row.status | statusFilter">
              {{ row.status }}
            </el-tag>
          </template>
        </el-table-column>
      </el-table>
    </template>
    
    

    elment-col.js组件

      render(h) {
        // slots 也要渲染,需要计算合并表头
        return h('div', this.$slots.default);
      }
    

    api数据

    组件传值

    绑定属性, props接收

    组件插槽

    1. 默认插槽/具名插槽
    2. 作用域插槽: 封装组件时会被经常用到

    案例: Level.js 组件

    export default {
        props:{
            type:String | Number
        },
        methods:{
            handleClick(e){
                console.log(e.target)
            },
            handleInput(e){
               this.msg = e.target.value
            }
        },
        data(){
          return {msg:'zf'}
        },
        mounted(){
        },
        render(h){ // jsx => js + xml 去写代码
            // h('h'+this.type,{},[this.$slots.default])
            let tag = 'h' + this.type
            return <tag>
                <input type="text" value={this.msg} onInput={this.handleInput}/>
                <span  onClick={this.handleClick}>{this.$slots.default}</span>
                {this.msg}
            </tag>
    
            // https://github.com/vuejs/babel-plugin-transform-vue-jsx#difference-from-react-jsx
        }
    }
    

    element的table-column.js组件:

      render(h) {
        // slots 也要渲染,需要计算合并表头
        return h('div', this.$slots.default);
      }
    

    template和render函数渲染组件

    template  html方式渲染组件
    render    js方式渲染组件
      createElement  返回vNode
      jsx            返回vNode
    
    vNode最终被$mount挂载成vueComponent 最终被渲染成dom树
    

    <template>
      <div>我是子君,我的公众号是<span class="emphasize">前端有的玩</span></div>
    </template>
    

    编译后成了render函数, 因此render函数的方式写组件执行效率更高

    function () {
      var e = this,
      // e._self._c 对应源码里面的createElement
      t = e._self._c;
      // 返回了一个 createElement('div',[])
      return t("div", [
        // e._v 对应源码里面的createTextVNode
        e._v("我是子君,我的公众号是"),
        t("span", { staticClass: "emphasize" }, [e._v("前端有的玩")]),
      ]);
    }
    

    render函数 函数式组件

    createElement 返回vNode,
    多个vNode组成vDom
    
    函数式组件
        functional:true,
        不需要实例化,无状态,没有生命周期,所以渲染性能要好于普通组件
        没有this, props, slots等都在context上面挂着
    

    组件操作其他api

    Vue.extend
    Vue.mxin
    
    let MessageConstructor = Vue.extend(MessageComponent);
    let instance = new MessageConstructor({ // 给这个组件传入了data数据
        data:options //选项会和原组件的合并
    });
    
    new Vue({
        el:       优先级最低
        template: 优先级
        render:   优先级最高
    })
    
    vm.$mount()时:
      挂载时检查template/render
      给$el赋值
    
    
    vm.$mount(): 给$el赋值
      无参 获取template实例
      有参 获取template实例 + 作为这个参数的子元素
    
    

    为什么使用函数式组件

    最主要最关键的原因是函数式组件不需要实例化,无状态,没有生命周期,所以渲染性能要好于普通组件
    函数式组件结构比较简单,代码结构更清晰

  • 相关阅读:
    2017-2018-1 20145237、20155205、20155218实验一 开发环境的熟悉
    作业三总结
    作业二总结
    作业总结1
    自我介绍
    计科16-4刘悦
    第九次作业
    作业八
    作业七
    作业六
  • 原文地址:https://www.cnblogs.com/iiiiiher/p/13502887.html
Copyright © 2011-2022 走看看