[英]How to access child ref from parent
我有需要验证的动态字段。 动态字段是使用组件创建的,可以通过按钮添加到数组中。 当我尝试验证动态字段时,找不到 ref。
子组件
<template>
<el-form :model="dist"
ref="dynamicForm"
:rules="rules">...</el-form>
</template>
家长
<template>
<el-form :model="dist"
ref="parentForm"
:rules="rules">
<dynamicField
v-for="df in items></dynamicField>
</el-form>
</template>
<script>
this.$refs.dynamicForm.validate( (valid) => {
console.log("Dynamic form validated? " + valid);
})
</script>
您可以Vue.nextTick
使用Vue.nextTick
,以便Vue
有足够的时间将引用与vm
绑定
....
methods:{
clicked(){
var vm = this
Vue.nextTick(() => {
this.$refs.dynamicForm.validate( (valid) => {
console.log("Dynamic form validated? " + valid);
})
})
},
}
....
我也在代码中找到了一些东西。
您正在使用
this.$refs.dynamicForm
在父instance
内部并在子ref="dynamicForm"
定义它不确定您想要的是什么,但我猜不能通过父子访问refs
(我想我没有检查它)
但只是暗示可能也会引起麻烦。
更新
访问子参考:
Vue.component('child', { template: '#child', data: function() { return { childValue: 'Child Comp ' + Math.ceil((Math.random() * 100)) } }, created: function() { } }); new Vue({ el: '#app', data: { }, created: function() { this.refIndex = 0; }, methods: { getRef() { this.refIndex++; return 'childComp' + this.refIndex; }, clickHandler: function() { for(var i=1; i <= this.refIndex; i++ ) { console.log(this.$refs['childComp' + i] .$refs.inputOfChild.value); } // this.$refs['childComp' + i] -> point to child compo // this.$refs['childComp' + i].$refs -> point to child compo's ref // this.$refs['childComp' + i].$refs.inputOfChild -> point to child compo's ref's input } } });
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.3/vue.js"></script> <div id="app"> <button @click="clickHandler">Access Child's Ref</button><br/> <child :ref="getRef()" ></child><br/> <child :ref="getRef()" ></child><br/> <child :ref="getRef()" ></child><br/> <child :ref="getRef()" ></child><br/> </div> <template id="child"> <input ref="inputOfChild" type="text" v-model="childValue"> </template>
为了访问子组件中的引用,我使用了这样的东西:
...
<Parent>
<Child ref="child" />
</Parent>
...
父组件中的方法:
...
onSubmit() {
let form = this.$refs.child.$refs.form;
if (!form.validate()) {
return;
}
}
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.