Vue.js - 从模板内访问数据属性而不使用 vue 文件中的道具

Posted

技术标签:

【中文标题】Vue.js - 从模板内访问数据属性而不使用 vue 文件中的道具【英文标题】:Vue.js - access data property from within template without using props in vue file 【发布时间】:2020-04-14 21:59:19 【问题描述】:

在我的 Laravel + Vue.js SPA(单页应用程序)中,我使用的是 BootstrapVue 和 VeeValidate。

EditProfile.vue 文件中,我想从模板中的属性default_country_code 访问数据属性default_country_code

我可以通过使用 props 来实现它,即:在 Vue 根实例中具有数据属性,然后在 EditProfile.vue 文件中的 props 的帮助下在模板中使用它。

但我想在模板中使用它而不使用任何props。因为如果我使用props,我需要在不同页面的模板部分中使用的所有道具都必须在 Vue root instance 中定义。而当那些将用作props 的数据属性来自数据库时,我必须在相应的 Laravel 控制器方法中在 DB 中进行多次查询,并在 Vue 根实例中使用它们。而且这种方法对我来说似乎不是任何松散耦合的架构。

EditProfile.vue 页面中,我有:


    <template>     
             <ValidationProvider vid="name" rules="required" name="name" v-slot=" valid, errors ">
                           
                  <b-form-group
                                    label="Name:"
                                    label-for="exampleInput1"
        
                            >


                      <b-form-input

                                v-model="name"
                                default-country-code="default_country_code"
                                :state="errors[0] ? false : (valid ? true : null)" 
                                placeholder="Enter Name"

                       ></b-form-input
        
                                <b-form-invalid-feedback id="inputLiveFeedback"> errors[0] </b-form-invalid-feedback>
    
                  </b-form-group>

             </ValidationProvider>
        
</template>         
                        
        
        export default 
                name: "EditProfile",
                props: 
        
                ,
               data: () => (
                    name:"Mr. XYZ",
                    default_country_code:"FR"
        
                )
        
        ;

如何在模板属性中使用default_country_code,而不使用任何props,正如我之前所说的,通过Vue根实例的帮助?

【问题讨论】:

您可以使用像Vuex 这样的集中式存储来存储应该跨组件使用的数据。 @RossAllen,不使用Vuex 的任何方式? 如果您编写一些东西来支持您的用例,您将编写一个小型的、有限的 Vuex 版本。我建议添加 Vuex,因为随着您添加更多功能,它也会派上用场。 【参考方案1】:

假设您尝试从子组件访问值,您可以访问 Vue 的状态。例如let someVar = $parent.default_country_code

也就是说,使用propsvuex 之类的东西来存储全局状态会更好。

【讨论】:

为什么需要访问父级? 我假设这就是数据所在的位置。如果您通过道具将数据传递给子组件(然后数据存在于调用子组件的组件中)。因此,在子组件中,您请求父组件的数据。 我说过我不会使用props 你问为什么是 $parent。我解释说,在 your example 中使用 props 数据存在于父组件中。因此,如果没有道具,您将使用 $parent 从 WITHIN CHILD 访问数据。

以上是关于Vue.js - 从模板内访问数据属性而不使用 vue 文件中的道具的主要内容,如果未能解决你的问题,请参考以下文章

如何解决“属性内的插值已被删除。使用 v-bind 或冒号速记”? Vue.js 2

05Vue.js---计算属性

Vue.js 的模板语法:插值v-bind事件处理

Vue.js 动态绑定class

Vue.js的模版渲染

Vue.js - 组件模板不使用 v-for 渲染