av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

javascript - vue組件extend擴(kuò)展報(bào)錯(cuò)

瀏覽:124日期:2023-03-26 16:44:42

問題描述

寫了一個(gè)select組件,具體在業(yè)務(wù)中使用需要修改下,在繼承select的基礎(chǔ)上做了修改,重新命名為teble-select, vue提示 [Vue warn]: Error in render function: 'TypeError: Cannot read property ’name’ of undefined' 這是啥原因,是我select組件寫的有問題導(dǎo)致的嗎? 請(qǐng)教下同志們select組件:

<template> <p ref='element' : :readonly='readonly' v-if='visible' : @click='toggle()'> <p : :disabled='disabled'><span>{{selected.name}}</span> </p> <p : v-if='open'><ul :class='$style.listview'> <li : v-for='(item,index) in options' :disabled='item.disabled' :pider='item.pider' :role='(index === selectedIndex) ? ’z-sel’:’’' @click='select($event,index)'>{{item.name}}</li></ul> </p></p></template><script> const Select = Base.extend({ name: ’u-select’, props: {options: Array,readonly: Boolean,disabled: Boolean,visible: { type: Boolean, default: true },width: { type: [String, Number], default: ’160’ },value: [String, Number], }, data() {return { open: false, selectedIndex: this.initSelectedIndex(this.value),}; }, created() {EventUtil.addHandler(document, ’click’, this.fadeOut.bind(this)); }, computed: {selected() { return this.options[this.selectedIndex];}, }, methods: {toggle(value) { if (this.disabled)return; if (value)this.open = value; elsethis.open = !this.open;},select(event, index) { if (this.readonly)return; if (this.options[index].disabled || this.options[index].pider) {event.stopPropagation();return false; } // this.selected = this.options[index]; this.selectedIndex = index; /** * @event select 選中列表項(xiàng)時(shí)觸發(fā) * @property {object} sender 事件發(fā)送對(duì)象 * @property {object} selected 選中后的列表對(duì)象 * @property {String} value 選中后的列表對(duì)象的值 */ this.$emit(’select’, {sender: this,selected: this.options[index],value: this.options[index].value, });},initSelectedIndex(value) { let selIndex = 0; if (this.value) {this.options.some((item, index) => { if (item.value === value) {selIndex = index;return true; } return false;}); } return selIndex;},fadeOut(event) { Select.opens.forEach((item, index) => {// 這個(gè)地方不能用stopPropagation來處理,因?yàn)檎归_一個(gè)Select的同時(shí)要收起其他Selectconst element = item.$refs.element;let element2 = event.target;while (element2) { if (element === element2)return; element2 = element2.parentElement;}item.toggle(false); });}, }, watch: {open(newValue) { const index = Select.opens.indexOf(this); if (newValue && index < 0)Select.opens.push(this); else if (!newValue && index > -1)Select.opens.splice(index, 1);},/** * @event change 選中列表項(xiàng)改變時(shí)觸發(fā) * @property {object} sender 事件發(fā)送對(duì)象 * @property {object} selected 改變后的列表對(duì)象 * @property {String} value 改變后的列表對(duì)象的值 */selected(newValue) { this.$emit(’change’, {sender: this,selected: newValue,value: newValue.value, });},value(newValue) { this.selectedIndex = this.initSelectedIndex(newValue);}, },});//Select 類的靜態(tài)屬性 用來保存當(dāng)前處于open狀態(tài)的Select對(duì)象Select.opens = [];export default Select;</script>組件是可以正常使用的,但是重新包裝下 就會(huì)提示name undefined ??

問題解答

回答1:

options 有可能為空嗎?如果有可能為空,那么 selected 有可能是 undefined

如果涉及到異步,在這個(gè)組件模板根元素上加 v-if='options.length !== 0'

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 国产精品视频在线观看 | 久久国产福利 | 四虎影院在线观看免费视频 | 久久88| 久久中文字幕av | 欧美日韩国产综合在线 | 亚洲精品久久久久中文字幕欢迎你 | 日韩一区中文字幕 | 91麻豆精品国产91久久久久久久久 | 精品国产精品国产偷麻豆 | 欧美日韩三级 | 成年人在线视频 | 国产精品自拍一区 | 中文字幕日本一区二区 | a在线视频| 荷兰欧美一级毛片 | 欧洲尺码日本国产精品 | 国产精品久久777777 | 久久亚洲一区二区三 | 欧美一区二区三区久久精品 | 亚洲一区视频在线 | 久久精品高清视频 | 国产在线观看福利 | 欧美成人精品在线 | 一区二区三区精品视频 | 亚州精品天堂中文字幕 | 黄色一级大片在线免费看产 | 久久久精品一区 | 成人性生交a做片 | 欧美一区二区另类 | 欧美激情综合色综合啪啪五月 | 亚洲一区二区电影在线观看 | 亚洲福利一区二区 | 伊人超碰在线 | 午夜大片 | 欧美日韩国产一区 | 男女羞羞免费网站 | 国产精品美女久久久久aⅴ国产馆 | 一区二区三区中文字幕 | 一级毛片视频免费观看 | 国产亚洲精品成人av久久ww |