无法在 Vue.js(laravel 项目)中创建新的实例属性

Posted

技术标签:

【中文标题】无法在 Vue.js(laravel 项目)中创建新的实例属性【英文标题】:Cannot create new Instance Properties in Vue.js (laravel project) 【发布时间】:2021-08-17 14:45:37 【问题描述】:

我正在尝试创建本地化属性,例如 Laravel 刀片模板中的 __('text')。 我创建了一个全局窗口变量,它包含所有需要的数据,名称为 window.i18n

这是我的resourses/js/app.js 文件:

require('./bootstrap');

window.Vue = require('vue');

// Here I tried to create new Instance properties
import _ from 'lodash'
window.Vue.prototype.__ = str => _.get(window.i18n, str)

Vue.component('autocomplete',require('./components/SearchComponent.vue').default);

const app = new Vue(
    el: '#app',
);

还有我的/components/SearchComponent.vue 文件,只有脚本部分:

<script>
 export default
    props: [
        'categories'
    ],
    data()
        return 
            query: '',
            results: [],
            categoryText: __('text.save'), // Here I tried to use __() property
            categoryId: 0
        
    ,
    methods: 
    autoComplete() 
        this.results = [];
        if(this.query.length > 2)
            axios.get('/posts/search',params: query: this.query, category_id: this.categoryId).then(response => 
                this.results = response.data;
                this.categoryText = "Избери";
                this.categoryId = 0;
            );
        
    ,
    categoryChange(e) 
        this.categoryText = e.target.text;
        var id = event.target.getAttribute('data-category-id');
        this.categoryId = id;
    ,
    mounted: function () 
        console.log(this.categories);
    
    
 
</script>

我收到了这个错误:

app.js:38639 [Vue 警告]:data() 中的错误:“ReferenceError: __ is not 定义”

无法处理我缺少的东西。

【问题讨论】:

你试过 window.__('text.save') 吗? 您是否尝试使用 categoryText 作为计算属性? return this.__(‘text.save’) 【参考方案1】:

您已将__ 添加到Vue.prototype,使其成为实例属性。要访问实例属性,请在 data() 中使用 this

export default 
  data() 
    return          ?
      categoryText: this.__('text.save')
    
  

或者,您可以通过将__ 直接附加到window 来将其设为全局,这将使您当前的代码能够工作:

window.__ = str => _.get(window.i18n, str)

【讨论】:

你应该知道这个解决方案不是被动的:切换语言不会自动更新categoryText。请改用vue-i18n,并将categoryText 移动到computed

以上是关于无法在 Vue.js(laravel 项目)中创建新的实例属性的主要内容,如果未能解决你的问题,请参考以下文章

试图在 [vue.js 3] 中创建一个原型来全局访问我的 Api (Axios),但我总是收到此错误:“无法读取未定义的属性”

无法在 Laravel 中创建 composer .cache 目录

Laravel 5.1 + Vue.js - vue-router beforeEach AuthService

text 在root中创建laravel项目

在 Laravel 项目中创建密码哈希

在 Laravel-8 项目中创建数据不起作用,如何解决?