Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript nd内部。在传递到internal时,我包含了用于干净处理更新的_Javascript_Vue.js_Vuejs2_Vue Component - Fatal编程技术网

Javascript nd内部。在传递到internal时,我包含了用于干净处理更新的

Javascript nd内部。在传递到internal时,我包含了用于干净处理更新的,javascript,vue.js,vuejs2,vue-component,Javascript,Vue.js,Vuejs2,Vue Component,我将searchText定义为一个可设置的计算机,它会发出触发sync的更新事件,这样您仍然可以v-model=“searchText” const-inner=Vue.component('inner'{ 模板:` `, 道具:[“占位符”], 计算:{ 搜索文本:{ get(){返回this.placeholder;}, set(newValue){this.$emit('update:placeholder',newValue);} } } }); 常量外部=Vue.component(

我将
searchText
定义为一个可设置的计算机,它会发出触发
sync
的更新事件,这样您仍然可以
v-model=“searchText”

const-inner=Vue.component('inner'{
模板:`
`,
道具:[“占位符”],
计算:{
搜索文本:{
get(){返回this.placeholder;},
set(newValue){this.$emit('update:placeholder',newValue);}
}
}
});
常量外部=Vue.component('outer'{
模板:`
你好:{{client_id}}
`,
道具:['client_id'],
方法:{
testos(){
log(“是的,客户端id是”,this.client\u id);
}
}
})
新Vue({
el:“#应用程序”,
数据:{
客户端id:“初始客户端id”
},
组成部分:{
“内部”:内部,
“外部”:外部
}
})

您的
ref
被定义为根级模板的一部分。您正试图从
外部
访问它,但那里没有定义它,因此它永远不会显示

一般来说,
ref
s是一种例外情况。当您确实需要了解DOM的状态时,而不是当您需要共享数据时,您应该将它们视为最后的手段

共享数据的正确方法是让需要使用数据的组件的共同祖先拥有数据。例如,它可能是Vuex之类的存储,也可能是根实例

我已经写了如果根实例拥有
client\u id
并与
outer
internal
共享,那么示例代码可能如何工作。在传递到
internal
时,我包含了用于干净处理更新的

我将
searchText
定义为一个可设置的计算机,它会发出触发
sync
的更新事件,这样您仍然可以
v-model=“searchText”

const-inner=Vue.component('inner'{
模板:`
`,
道具:[“占位符”],
计算:{
搜索文本:{
get(){返回this.placeholder;},
set(newValue){this.$emit('update:placeholder',newValue);}
}
}
});
常量外部=Vue.component('outer'{
模板:`
你好:{{client_id}}
`,
道具:['client_id'],
方法:{
testos(){
log(“是的,客户端id是”,this.client\u id);
}
}
})
新Vue({
el:“#应用程序”,
数据:{
客户端id:“初始客户端id”
},
组成部分:{
“内部”:内部,
“外部”:外部
}
})

由于无法使用
ref
的唯一原因是它是在父级中定义的,因此可以转到
$parent
并使用其
refs
。注意,这使得
外部
依赖于
内部
的结构和
ref
的存在(与之纠缠在一起)才能到达它。这是一个糟糕的设计,但它是对代码的最小更改,您必须让它完成您想要做的事情

const-inner=Vue.component('inner'{
模板:`
`,
道具:[“占位符”],
数据:函数(){
返回{
searchText:this.placeholder
}
}
});
常量外部=Vue.component('outer'{
模板:`
你好:{{client_id}}
`,
数据:函数(){
返回{
客户端id:“”
}
},
方法:{
testos:function(){
this.client_id=this.$parent.$refs.testref.searchText;
console.log('method',this.client\u id);
}
}
})
新Vue({
el:“#应用程序”,
组成部分:{
“内部”:内部,
“外部”:外部
}
})

由于无法使用
ref
的唯一原因是它是在父级中定义的,因此可以转到
$parent
并使用其
refs
。注意,这使得
外部
依赖于
内部
的结构和
ref
的存在(与之纠缠在一起)才能到达它。这是一个糟糕的设计,但它是对代码的最小更改,您必须让它完成您想要做的事情

const-inner=Vue.component('inner'{
模板:`
`,
道具:[“占位符”],
数据:函数(){
返回{
searchText:this.placeholder
}
}
});
常量外部=Vue.component('outer'{
模板:`
你好:{{client_id}}
`,
数据:函数(){
返回{
客户端id:“”
}
},
方法:{
testos:function(){
this.client_id=this.$parent.$refs.testref.searchText;
console.log('method',this.client\u id);
}
}
})
新Vue({
el:“#应用程序”,
组成部分:{
“内部”:内部,
“外部”:外部
}
})


作为一般规则,不要查看组件内部,尤其不要试图从视图中查看组件以获取有用的内容。这就是框架要解决的问题。管理数据,以便需要数据的单位能够访问数据。可能是内部组件作为道具接收数据,而不是拥有数据,并在数据应该更改时发送事件。最初的问题是
ref
是在根Vue实例中定义的,而不是作为任一组件的一部分。您试图访问它,就好像它属于
外部组件一样。一般来说,不要查看组件内部,尤其不要试图在视图中查看它们以获取有用的内容。这就是框架要解决的问题。管理数据,使需要数据的单位能够访问i
mounted: function() {
  this.$nextTick(() => {
      console.log(this.$refs.testref)
  })
}
<inner ref="testref"><inner/></test1>