AkameRed
发布于 IP属地香港

v-for打印出了对象成员(组件)的名字

前言

个人资料修改有两部分:“账号设置”和“个人资料”。分别写成两个组件,在同一页面切换即可。

代码记录

const currentTab = ref('SetAccount') // 这个是字符串,不是组件。

const tabs = { // 下面两个都是组件,而不是字符串
    SetAccount, // 账号设置
    EditProfile, // 个人资料
}

不给组件起名字,组件会有默认名,两个组件的名字分别是"EditProfile","SetAccount"

在部分,用v-for

<li
  :class="is-active:{currentTab===tab}" <!--**这里currentTabtab都是字符串**-->
  v-for="(value,tab,index) in tabs
  @click=()=>{
    currentTab=tab
    console.log(value,name,index) 
  }
>
<!--上面console.log之后发现value是组件实例的typetab就是名字一个字符串,index就是01这些数字-->
 <a>{{ tab==='EditProfile' ? '个人资料' : '账号设置' }}</a> <!--这里是tab而不是currentTab之前错写成currentTab,结果点击账号设置”,两个菜单都变成账号设置”,反之同理-->
</li>

TODO: 组件实例的type属性值和上面打印的value一样,双方的字段都一样,很有可能就是一回事,只是我没看过源码,不敢确定。(做个标记,回头确定)


以上写法是优化过的,之前是下面这样写的:

<li :class="{'is-active':currentTab==='EditProfile'}" @click="currentTab='EditProfile'">
  <a>个人资料</a>
</li>
<li :class="{'is-active':currentTab==='SetAccount'}" @click="currentTab='SetAccount'">
  <a>账号设置</a>
</li> -->

这么一看,优化之后不需要写那么多个组件的名字,没那么容易犯错。

浏览 (401)
点赞
收藏
全部评论 1
AkameRed
AkameRed
IP属地香港
本文重点: 1. v-for=&#34;(value,name,index) in 组件对象&#34;迭代出来的value与组件实例的type属性值一样。 2. 不给组件设置名字,则hello.vue的组件名就是&#39;hello&#39;字符串。 3. 类型为 &#34;string&#34; 的表达式不能用于索引,就用&#34;as keyof typeof 具体类型&#34;,如: currentTab as keyof typeof defineComponent。(这个文里没写,反正是个人学习记录,里面只有细节。重点在本评论)
点赞
评论