所谓的代理者是指一个类别可以作为其它东西的接口。代理者可以作任何东西的接口:网上连接、存储器中的大对象、文件或其它昂贵或无法复制的资源。
情景
我们从后端拿到了一堆数据
- 数据不为空——进行列表显示
数据为空——显示数据为空的提示
// list.vue
<template>
<div>
<div v-if="isEmpty">数据为空</div>
<div v-else>
<div v-for="item in data">
... do something
</div>
</div>
</div>
</tempalte>
<script>
export default{
props: {
data: Array
},
computed: {
isEmpty() {
return this.data.length < 1
}
}
}
</script>
可以发现List组件做了两件事:数据为空的处理、数据不为空的处理,这种设计是不太友好的
Proxy
// ProxyList.vue <template> <div> <empty v-if="isEmpty" /> <list v-else :data="data" /> </div> </tempalte> <script> import Empty from './Empty' import List from './List' export default{ props: { data: Array }, computed: { isEmpty() { return this.data.length < 1 } }, components:{ Empty, List } } </script>
对于数据data的使用者来说,只需关心拿数据渲染列表,数据为空是什么样的完全不关心