javascript - 将指令从组件应用到子组件
问题描述
在 Vue.js 中,如果我有一个组件,例如custom-input
,并且我想从父类设置焦点,可以将来自父类的指令应用于子类吗?
<custom-input v-focus />
<div class='form-group'>
<input :v-focus='vFocus'> // This doesn't work
</div>
<script type='text/javascript'>
Vue.directive("focus", {
inserted: function(el) {
el.focus();
}
});
</script>
解决方案
AFAIK,这是不可能的。模板渲染器在幕后有一点魔力,它不支持此功能。您可以使用 render 函数来实现该功能,但这可能会变得相当复杂。
更简单的解决方案是通过更新组件模板和指令来实现它。
这是一个简单的例子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
函数在所有具有该指令的组件上运行。然后不要在父级上使用指令,而是将其传递下来
推荐阅读
- node.js - 即使账户中存在域,AWS CLI list-domain-names/describe-domain 也会返回空
- cron - Cron 表达式:完成另一个工作后开始工作
- java - Apache lang3 有效,但 Apache lang 无效。为什么?
- c - 在 Mac OS X 上用 C 编译hiredis
- haskell - Haskell中的计时器(Control.Concurrent.Timer):重复执行
- ios - 撤销 .p8 密钥会使现有的 FCM 令牌失效吗?
- django - 创建的网站用于编辑带框架的图像
- fusionauth - Fusionauth ADFS 集成问题
- elasticsearch - 如何使用邮递员将 json 日志插入现有的弹性搜索索引
- r - 如何在R中的for循环中排列项目?