AFAIK, это невозможно из коробки. За кулисами скрывается немного волшебства, которое делает средство визуализации шаблонов, которое не поддерживает эту функцию. Вы можете реализовать эту функцию, используя функцию рендеринга, но это может оказаться довольно сложным.
Более простое решение - реализовать его путем обновления шаблона компонента и директивы.
вот простой пример http://jsfiddle.net/7tzLgp1c/
Vue.directive("focus", {
inserted: function(el, binding, vnode) {
if (binding.value !== undefined && binding.value !== false)
el.focus();
}
});
new Vue({
el: "#app",
components: {
foo: {
props: {
focus: {
default: undefined,
}
},
template: '<div><input v-focus="focus"></div>'
}
}
})
шаблон
<div id="app">
<foo focus></foo>
<foo></foo>
</div>
Хитрость в том, чтобы реализовать условие внутри директивы, так как функция директивы inserted
работает на всех компонентах, которые имеют директиву. тогда вместо использования директивы для родителя вы передадите ее