在Vuejs中循环遍历mapstate计算的属性

时间:2019-07-13 09:00:58

标签: vue.js internationalization vuex vuetify.js computed-properties

我正在研究Vue项目,该项目使用VUEX和Vuetify支持两种语言。

不是像这样直接引用文本:
{{ $vuetify.t('$vuetify.my-component.text') }},我将其作为状态放置在命名空间的VUEX存储模块中,然后将其作为mapstate计算的属性引用,如下所示:{{ textProp }}
然后在计算出的脚本中放入...mapState('language', ['textProp']),该语言是VUEX模块:

export default {
    namespaced,
    state() {
        return {
            textProp: Vue.prototype.$vuetify.t('$vuetify.textProp')
        }
    }
}

现在来看我的问题:
我需要遍历项目列表,每个项目都包含一个动态文本,它会根据所选语言而变化,因此这是HTML模板:


  <v-list>
    <v-list-tile
            v-for="item in items"
            :key="item.title"
            :to="item.to"
            router>

      <v-list-tile-action>
        <v-icon>{{ item.icon }}</v-icon>
      </v-list-tile-action>

      <v-list-tile-content>
        <v-list-tile-title>

            {{ item.title }}

        </v-list-tile-title>
      </v-list-tile-content>

    </v-list-tile>
  </v-list>

,脚本为:

export default {
    data() {
        return {
            items: [
                { title: this.home, to: '/', icon: 'home' },
                { title: this.orgsTxt, to: '/orgs', icon: 'business' },
                { title: this.peopleTxt, to: '/people', icon: 'people' },
                { title: this.servicesTxt, to: '/services', icon: 'store' }
            ],
        }
    },
    computed: {
        ...mapState('language', [
            'home',
            'orgsTxt',
            'peopleTxt',
            'servicesTxt',
        ]),
    },
}

我的问题是引用标题中的文本,我不能放它created(),因为当用户更改语言时文本不会更改,并且我不会对每个列表进行硬编码项目。

很抱歉解释了太多,谢谢。

1 个答案:

答案 0 :(得分:0)

我通过添加方法而不是从数组中引用标题来解决它:

HTML模板:

  <v-list>
    <v-list-tile
            v-for="(item, index) in items"
            :key="index"
            :to="item.to"
            router>

      <v-list-tile-action>
        <v-icon>{{ item.icon }}</v-icon>
      </v-list-tile-action>

      <v-list-tile-content>
        <v-list-tile-title>

            {{ navItem(index) }}

        </v-list-tile-title>
      </v-list-tile-content>

    </v-list-tile>
  </v-list>

脚本:

methods: {
    navItem(id){
        if(id === 0) return this.home;
        if(id === 1) return this.orgsTxt;
        if(id === 2) return this.peopleTxt;
        if(id === 3) return this.servicesTxt;
    }
},

现在一切正常。