Ранее у меня была строка, которая могла содержать HTML (с сервера, а не пользователя), которую я принимал как опору. Проще говоря, это было примерно так.
<foobar alert-content = "<strong>bazboo</strong>">
</foobar>
И я определил опору, чтобы она требовалась вот так
alertContent: {
type: String,
required: true,
},
Я решил, что слот здесь имеет больше смысла, поэтому я начал передавать, что это слот.
<foobar>
<strong>bazboo</strong>
</foobar>
Со слотом в шаблоне, как и следовало ожидать. И это работает. Но я больше не могу этого требовать.
Как мне потребовать слот в Vue.js?
Такое же поведение, как если бы я не смог пройти требуемый реквизит, было бы идеальным.
Ха, предоставьте один контент слота по умолчанию, который предупреждает разработчика ...



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я не знаю ни одного встроенного способа, который требовал бы слота так же, как опора, но вы можете довольно легко обеспечить ту же функциональность, проверив слот по умолчанию при создании компонента.
Вот пример.
console.clear()
Vue.component("TestComponent",{
template: `
<div>
<slot />
</div>
`,
created(){
if (!this.$slots.default)
console.error("TestComponent requires content be provided in the slot.")
}
})
new Vue({
el: "#app"
})<script src = "https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<div id = "app">
<test-component></test-component>
</div>В качестве альтернативы предоставьте содержимое по умолчанию, которое делает очевидным, что необходимо предоставить слот.
console.clear()
Vue.component("TestComponent",{
template: `
<div>
<slot>
<h2>Hey dummy, you need to add content to TestComponent</h2>
</slot>
</div>
`,
created(){
if (!this.$slots.default)
console.error("TestComponent requires content be provided in the slot.")
}
})
new Vue({
el: "#app"
})<script src = "https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<div id = "app">
<test-component></test-component>
<hr>
<test-component>
<h3>This one won't show the default content</h3>
</test-component>
</div>
Какого поведения вы ожидаете, если его нет?