Vue.js 将道具组件传递给根实例

Vue.js 将道具组件传递给根实例,vue.js,Vue.js,我是vuejs的超级新手。我不知道如何将道具组件传递给根实例 这是我的密码 组件(Tesvue.vue) 刃锉 <div class="" id="app"> <tesvue name="{{$model->name}}"></tesvue> </div> 场景是,im将数据从laravel控制器提取到blade元素,然后vue js可以访问它。这类似于将php变量传递给vuejs。 我知道这可以通过Php vars to java

我是vuejs的超级新手。我不知道如何将道具组件传递给根实例 这是我的密码

组件(Tesvue.vue)

刃锉

<div class="" id="app">
  <tesvue name="{{$model->name}}"></tesvue>
</div>

场景是,im将数据从laravel控制器提取到blade元素,然后vue js可以访问它。这类似于将php变量传递给vuejs。 我知道这可以通过Php vars to javascript插件实现,也可以直接内联使用。这样地 var name={{name}

但我想用vuejs的方式(道具)做到这一点

所以,如何将道具数据传递给根实例。“getname”如何获得道具“name”
谢谢,对不起,我的英语不好。

组件不能直接将数据传递回其父级。这只能通过事件实现。因此,要使其正常工作,您必须在子组件准备就绪后立即从其发出事件,并且必须侦听该事件。你的情况是这样的:

<div id="app" 
data-name="dataname" 
data-another="anotherdata" 
data-anything-else="anydata">
export default {
  // ...
  props: ['name', 'another', 'anythingElse'],
  // ...
};
组件(Tesvue.vue)

刃锉

<div class="" id="app">
    <tesvue name="{{$model->name}}" @setname="changeName"></tesvue>

    <!-- getname got set through changeName event -->
    <span v-text="getname"></span>
</div>

我找到了解决方案

<template>
  <label class="col-md-2 control-label">{{name}}</label>
</template>

<script>
export default {
  props: ['name'],
  mounted: function() {
    this.$root.getname = this.name;
  }
}
</script>

{{name}}
导出默认值{
道具:['name'],
挂载:函数(){
this.$root.getname=this.name;
}
}
看看这个


但非常感谢@Reduxxx回答我的新手问题。

这里有一个使用数据集的不错的解决方案:

HTML:

请参阅文档中的更多信息


如果你想同时使用多个数据集,你可以使用如下的扩展操作符分配一个对象:(如果你使用的是Babel并且有插件)

或者,如果您没有使用Babel:()

因此,如果您在html中定义了多个数据集,如下所示:

<div id="app" 
data-name="dataname" 
data-another="anotherdata" 
data-anything-else="anydata">
export default {
  // ...
  props: ['name', 'another', 'anythingElse'],
  // ...
};
有一些方法可以将数据从子级传递到父级。最好和可接受的方法是使用Vuex存储并发出事件

如果要从子级发出事件,可以调用方法来执行此操作:

然后,您可以在已导入组件的父组件中侦听此事件


或者,如果您想使用Vuex,则可以在存储状态中创建一个属性,还可以使用getter从state获取该属性,并使用变异来更改位于state的属性的值

然后在父组件中使用getter获取状态中的属性,在子组件中提交一个变种(如果您在整个过程中包含操作,这将非常好)来更改状态中的属性


使用商店,我的朋友。它看起来像什么?这是Vuex吗?是的,这是Vuex,简单地说,当您使用存储时,您的数据将在Vue实例中的任何位置可用。好的,我将学习它。谢谢我朋友的推荐信我很高兴能帮上忙。顺便说一句,如果你发现自己需要一些vue插件,我已经开发了一些你可以使用的开源repo。只是看看我的感谢和好运。是的,它很有效,但是。。。这是基于组件的spa的反模式。我认为更好的解决方案是向儿童公开setter方法。所以根组件“知道”有人会设置它,根组件决定谁可以设置;)更好的办法是使用store(vuex)来集中这些数据。是的,在我在youtube上看到vuex之后。也许vuex将是最好的解决方案。谢谢
<div id="app" data-name="dataname">
<template>
  <label class="col-md-2 control-label">{{name}}</label>
</template>
const root_element = document.getElementById('app');

new Vue({
    el: root_element,
    propsData: { name: root_element.dataset.name }
});
const root_element = document.getElementById('app');

new Vue({
    el: root_element,
    propsData: { ...root_element.dataset }
});
propsData: Object.assign({},root_element.dataset)
<div id="app" 
data-name="dataname" 
data-another="anotherdata" 
data-anything-else="anydata">
export default {
  // ...
  props: ['name', 'another', 'anythingElse'],
  // ...
};
callThisMethod () {
  this.$emit('nameOfEventYouWantToListen', dataToPass)
}
<ImportedComponent @nameOfEventYouWantToListen="callFunctionInParentHere" />