render函數(shù)----基于Vue和PHP打造前后端分離的通用管理系統(tǒng)(九)

先來看這個:

Schema: {
  columns: [
    {
      index: 'user-name',
      label: '姓名',
      name: 'name',
    }, {
      index: 'user-sex',
      label: '性別',
      name: 'sex',
      holder: 'switch',
      activeText: '男',
      inactiveText: '女',
    }, {
      index: 'user-depart',
      label: '部門',
      name: 'depart',
      holder: 'select',
      items: [
        {
          value: 1,
          label: '第一中學',
        },
        {
          value: 2,
          label: '第二中學',
        },
        {
          value: 3,
          label: '第三中學',
        },
        {
          value: 4,
          label: '第四中學',

        },
      ],
    }, 
  ],
}

假如有這么個組件唠雕,把這個Schema傳入,就可以渲染出一個form:


表單視圖.PNG

那么西乖,后端只要發(fā)送Schema + data,前端自動渲染視圖侣集,就不需要那么多的視圖頁面了。
這樣王凑,只需要基本的視圖塊來組合就可以了:

  • 表單視圖塊
  • 表格視圖塊
  • 圖表視圖塊
  • 樹狀視圖塊
    然后加以組合即可搪柑。
    按照上面的思路,我們設計容器頁和視圖組件頁
  • 容器頁可相互嵌套(管理頁面內跳轉)
  • 容器頁可跳轉(登錄頁跳轉到管理頁)
  • 容器頁可包含視圖組件
  • 視圖組件可以組合

這里邊涉及到動態(tài)渲染表單域索烹,通過Rander函數(shù)來處理工碾,新建ElFormField.vue文件來封裝所有的表單域:

import emitter from 'element-ui/src/mixins/emitter';

export default {
  render(createElement) {
    const self = this;
    // props
    const props = this.item || {};
    props.value = this.value;
    props.disabled = this.disabled;
    // children
    let children;
    let holder = this.item.holder || 'input';
    switch (holder) {
      case 'text':
        holder = 'input';
        break;
      case 'textare':
        holder = 'input';
        props.type = 'textarea';
        break;
      case 'password':
        holder = 'input';
        props.type = 'password';
        break;
      case 'time-range':
        holder = 'el-time-picker';
        props.isRange = true;
        break;
      case 'date-range':
      case 'data-time-range':
        holder = 'el-date-picker';
        break;
      case 'radio-group':
        children = [];
        this.item.items.forEach(element => children.push(createElement('el-radio', {
          props: {
            label: element.value,
            disabled: element.disabled,
          },
        }, [element.label])));
        break;
      case 'checkbox-group':
        children = [];
        this.item.items.forEach(element => children.push(createElement('el-checkbox', {
          props: {
            label: element.value,
            disabled: element.disabled,
          },
        }, [element.label])));
        break;
      case 'select':
        children = [];
        this.item.items.forEach(element => children.push(createElement('el-option', {
          props: element,
        })));
        break;
      default:
    }
    return createElement(`el-${holder}`, {
      props,
      on: {
        input: self.input.bind(self),
      },
    }, children);
  },
  props: {
    item: {
      type: Object,
      default: () => {},
    },
    value: {
    },
    disabled: {
      type: Boolean,
      default: false,
    },
  },
  components: {
    // ElPair,
    // ElAutoput,
    // ElVerify,
  },
  methods: {
    input(value) {
      this.$emit('input', this.item.name, value);
    },
  },
  mixins: [emitter],
};

代碼中item的表單域Schema信息,value是數(shù)據(jù)信息
下面是重點百姓,也是我踩的坑
Element-ui的表單通過廣播處理表單信息渊额,需要引入Element-ui自己定義的emitter
這就是代碼中為什么有個mixins: [emitter]垒拢。
否則旬迹,表單域的修改動作反饋不給表單,表單的清空動作也會失效求类。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末奔垦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子尸疆,更是在濱河造成了極大的恐慌宴倍,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仓技,死亡現(xiàn)場離奇詭異鸵贬,居然都是意外死亡,警方通過查閱死者的電腦和手機脖捻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門阔逼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人地沮,你說我怎么就攤上這事嗜浮。” “怎么了摩疑?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵危融,是天一觀的道長。 經(jīng)常有香客問我雷袋,道長吉殃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蛋勺,結果婚禮上瓦灶,老公的妹妹穿的比我還像新娘。我一直安慰自己抱完,他們只是感情好贼陶,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巧娱,像睡著了一般碉怔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上禁添,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天撮胧,我揣著相機與錄音,去河邊找鬼上荡。 笑死趴樱,一個胖子當著我的面吹牛馒闷,可吹牛的內容都是我干的酪捡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼纳账,長吁一口氣:“原來是場噩夢啊……” “哼逛薇!你這毒婦竟也來了?” 一聲冷哼從身側響起疏虫,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤永罚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后卧秘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呢袱,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年翅敌,在試婚紗的時候發(fā)現(xiàn)自己被綠了羞福。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡蚯涮,死狀恐怖治专,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情遭顶,我是刑警寧澤张峰,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站棒旗,受9級特大地震影響喘批,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一谤祖、第九天 我趴在偏房一處隱蔽的房頂上張望婿滓。 院中可真熱鬧,春花似錦粥喜、人聲如沸凸主。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卿吐。三九已至,卻和暖如春锋华,著一層夾襖步出監(jiān)牢的瞬間嗡官,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工毯焕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留衍腥,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓纳猫,卻偏偏與公主長得像婆咸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芜辕,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容