我有两个部分。一个子组件,它有两个插槽
,由来自另一个组件的DOM填充。我在另一个父组件中使用此组件。
我想要的是当我单击父组件中的元素时关闭子
组件。
超文本标记语言
<div id="app">
<parent></parent>
</div>
JS
// Child component.
const ChildTemplate = `
<div class="m-dropdown">
<button
class="m-dropdown__button"
aria-haspopup="true"
aria-expanded="false"
@click="handleClick"
@keyup.esc="close"
@closeDropdown="isActive = false"
>
<slot name="dropdownToggle"></slot>
</button>
<div
class="m-dropdown__content"
v-show="isActive"
>
<slot name="dropdownContent"></slot>
</div>
</div>
`;
const Child = {
template: ChildTemplate,
data() {
return {
isActive: false,
dropdownCTA: null,
dropdownCTAClassname: 'm-dropdown__button',
};
},
methods: {
handleClick(e) {
this.isActive = !this.isActive;
this.dropdownCTA = e.target.closest('button');
this.dropdownCTA.setAttribute('aria-expanded', 'true');
},
close() {
if (this.isActive) {
this.isActive = false;
this.dropdownCTA.setAttribute('aria-expanded', 'false');
}
},
documentClick(e) {
const el = this.$el;
if (this.isActive && el !== e.target && !el.contains(e.target)) {
this.close();
}
},
},
created() {
document.addEventListener('click', this.documentClick);
},
destroyed() {
document.removeEventListener('click', this.documentClick);
}
};
// Parent component.
const ParentTemplate = `
<child class="m-item-selector">
<div
class="m-item-selector__item"
slot="dropdownToggle"
>
{{itemSelected}}
</div>
<ul
slot="dropdownContent"
class="m-item-selector__item-list"
>
<li
class="m-item-selector__item-wrapper"
v-for="(item, index) in items"
:key="index"
>
<button
class="m-item-selector__item"
@click="selectItem(item)"
>
{{item}}
</button>
</li>
</ul>
</child>
`;
const Parent = {
template: ParentTemplate,
data() {
return {
items: ['item 1', 'item 2', 'item 3'],
itemSelected: 'item 1',
};
},
components: {
Child,
},
methods: {
selectItem(item) {
console.log(item);
// I want to close my child component in this method but
// 'this' represents my parent component.
// How can I access my child component so that
// I can do something like this: this.close() ?
this.itemSelected = item;
},
}
};
// Register components.
Vue.component('parent', Parent);
Vue.component('child', Child);
new Vue({
el: "#app"
})
这是小提琴:https://jsfiddle.net/eywraw8t/19300/
使用默认槽,这应该可以工作:this.$slots.default[0].context.close()
close()
应该在组件的方法
部分中定义
如果您使用的是命名插槽,只需替换default[0]
本文向大家介绍vue template中slot-scope/scope的使用方法,包括了vue template中slot-scope/scope的使用方法的使用技巧和注意事项,需要的朋友参考一下 在vue 2.5.0+ 中slot-scope替代了 scope template 的使用情形为,我们已经封装好一个组建,预留了插槽,使用 的插槽 首先 我们的创建一个组建 组建很简单有一个 slot
本文向大家介绍详解vue slot插槽的使用方法,包括了详解vue slot插槽的使用方法的使用技巧和注意事项,需要的朋友参考一下 官方文档其实已经讲得很详细,我根据文档,把官方的小案例实现了一下,这样更直观 单个slot使用最简单,也是最常用的,当我们定义了一个子组件,父组件在使用的这个组件的时候,想在内部自定义一些初始化数据,这时候就可以用slot实现。 具名slot只是给slot加了name
我试图访问一个方法在嵌套的Chilld组件使用ref。这是删除嵌套删除组件中的数据。我的代码如下(简化代码): 父类: 儿童班: 孙辈阶级: 但是,我无法让Supplier方法在这个孙子上下文中调用更改。该方法被调用,但调用方式很奇怪。 当组件被加载并打印索引时,它会被调用一次,但是它不工作!!!我甚至没有在孙子类中调用这个方法。请帮忙。 更新:除了现在的方法名之外,代码与编写的代码完全相同。
我有两个组成部分: 父组件 子组件 我试图从Parent调用child的方法,我尝试了这种方法,但无法得到结果: 有没有办法从父级调用子级的方法? 注意:子组件和父组件在两个不同的文件中。
问题内容: 我有两个组成部分。 父组件 子组件 我试图从父级调用孩子的方法,我尝试过这种方法,但没有得到结果 有没有一种方法可以从父级调用子级的方法? 注意:子组件和父组件位于两个不同的文件中 问题答案: 首先,让我表示,这通常 不是 在React领域中解决问题的方法。通常,您要做的是将功能传递给道具中的子代,并传递事件中的子代的通知(或者更好的是:)。 但是,如果 必须 在子组件上公开命令式方法
我想编写一个表单组件,它可以导出一个方法来验证其子级。不幸的是,表单在其子级上没有“看到”任何方法。 以下是我如何定义一个潜在的形式子项: 下面是我如何定义Form类: 我注意到我可以使用refs调用子组件上的方法,但不能通过props调用方法。儿童 这种行为有什么原因吗? 我怎样才能解决这个问题?