@danilr

Не до конца реактивные классы?

Почему то реактивные классы не всегда реактивны. Происходит мутация во vuex, перехожу в эту компоненту, а реактивные классы обновляются почему то не сразу, а при каком-то действии в компоненте( то есть при updated)
Как сделать, чтобы обновлялись сразу при изменении состояний во vuex?
Вот шаблон с реактивными классами
<div v-for="access in accessUnits" :key="access.id" class="action-item-box" @click="activeAccess(access.id)" :class="{'active-action': currentAccess === access.id}">
        <div class="action-item">
          <div class="item-value" 
            :class="{'checked-all': access.checkedAccess === 'all', 'checked-none': access.checkedAccess === 'none', 'checked-some': access.checkedAccess === 'some' }" 
            @click="toggleAccessUnits(access.id)"
          ></div>
          <div class="item-title">{{access.title}}</div>
        </div>
      </div>

получение данных из vuex через computed
computed:{
    accessUnits(){
        return this.$store.state.administration.accessUnits   
    }
}

и вот мутация, которая вызывается при клике на новую роль (далее чтобы отобразить все данные что тут считаются нужно перейти в другой компонент( с - он нужен, убирать нельзя), где собственно и не проставляются вовремя реактивные классы)
компоненты
mutations: {
    getUserAccess(state, roleId) {

      for (let i = 0; i < state.accessUnits.length; i++) {  // сбрасываем галки на дефолтные - false
        for (let j = 0; j < state.accessUnits[i].data.length; j++) {
          state.accessUnits[i].data[j].is_available = false
        }
      }
      let userAccessId = []
      console.log('state.accessUnits: ', state.accessUnits);

      if (!state.user){
        let roleAccessUnits = state.roles.find(role => role.id === roleId).access_units
        userAccessId = roleAccessUnits.map(accessUnit => accessUnit.id)
      }
      else if (state.user && roleId){
        if (roleId === state.user.role_id){
          userAccessId = state.user.access_units.map(accessUnit => accessUnit.id)
        }
        else{
          let roleAccessUnits = state.roles.find(role => role.id === roleId).access_units
          userAccessId = roleAccessUnits.map(accessUnit => accessUnit.id)
        }
      }

      for (let i = 0; i < state.accessUnits.length; i++) {
        let countUnitsValue = 0
        for (let j = 0; j < state.accessUnits[i].data.length; j++) {
          if (userAccessId.includes(state.accessUnits[i].data[j].id)) {
            state.accessUnits[i].data[j].is_available = true
            countUnitsValue++
          }
        }
        if (countUnitsValue == 0){
          state.accessUnits[i].checkedAccess = 'none'
        }
        else if (countUnitsValue < state.accessUnits[i].data.length) {
          state.accessUnits[i].checkedAccess = 'some'
        }
        else if (countUnitsValue == state.accessUnits[i].data.length) {
          state.accessUnits[i].checkedAccess = 'all'
        }
      }
    },
  • Вопрос задан
  • 237 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы