2016-04-21 108 views
0

作为一个简单的例子假设你在一个名为“我的-按钮”部分有这样的:插槽:访问范围变量

<button v-for='item in items' v-on:click="this.$emit('activate', item)"> 
    <slot>{{ item.name }}</slot> 
</button> 

如果我使用的组件在其他地方,有没有什么办法来覆盖槽访问item.name值?例如:

<my-component items="myItems"> 
    <span class="myspecialstuff">{{ item.name }}</span> 
</my-component> 

显然因为目前的情况是,VUE将抱怨找不到范围item

回答

0

UPDATE2: 下面的代码无法正常工作,由于https://github.com/vuejs/vue/issues/2511。我想不出别的什么。抱歉。

UPDATE:

为了实现特定插槽压倒一切的,定义插槽,

<button v-for='item in items' v-on:click="this.$emit('activate', item)"> 
    <slot v-bind:name="'item-'+item.name">{{ item.name }}</slot> 
</button> 

并重写为

<my-component items="myItems"> 
    //you have access to items so you can do this 
    //specialItems is an array of items which are to be overriden 
    <span class="myspecialstuff" v-for="item in specialItems" v-bind:slot="'item-'+item.name" > 
     {{ item.name }} 
    </span> 
</my-component> 

原来的答复: 那会很费解恕我直言。

有两种方法可以达到你想要的效果,这取决于<my-component在哪里得到items

  1. items作为道具传递给my-component。 (最常见的情况)。在这种情况下,您已经可以访问items,并且不需要为此跳过。

  2. <my-component>通过像表格或API一些外部资源越来越items。(不太可能)在这种情况下,您可以raise events to pass data或使用2-way bindings通过.sync

+0

我的确有机会获得物品数组在“我的组件”的范围内,但我没有访问for循环中的当前选定项目,这是我需要更新插槽内容。 – nablex

+0

说,你实际上是否使用你在这里发布的确切代码?因为它几乎没有问题。访问特定指数的方式与你实现它的方式各不相同, –

+0

这是我在用的一个简单的例子,不知道什么是错的(假设项目是一个数组)?它的工作原理也是如此,它只是失败插槽的重写。 – nablex