2015-03-03 2 views
0

После удаления состояний из $ stateProvider и его кэшей из cacheTemplate он дает мне «уже определенную» ошибку при попытке добавить одно и то же имя состояния.Как удалить состояния из stateProvider

clearStates: function() { 
     var states = this.$state.get(); 
     for (var i = 0; i < states.length; i++) { 
      if (states[i].name != 'shell.error404' && 
       states[i].name != 'shell.error500' && 
       states[i].name != 'shell' && 
       states[i].name != '') { 
       var tmplUrl = states[i].templateUrl; 
       if (tmplUrl) { 
        this.templateCache.remove(tmplUrl); 
       } 
       delete states[i]; 
      } 
     } 
    } 

любой способ сделать это?

ответ

0

Попробуйте

clearStates: function() { 
      var states = this.$state.get(); 
      var itemsToBeRemoved = []; 
      var removalIndex = 0; 
      for (var i = 0; i < states.length; i++) { 
       if (states[i].name != 'shell.error404' && 
        states[i].name != 'shell.error500' && 
        states[i].name != 'shell' && 
        states[i].name != '') { 
        var tmplUrl = states[i].templateUrl; 
        if (tmplUrl) { 
         this.templateCache.remove(tmplUrl); 
        } 
        //delete states[i]; 
        itemsToBeRemoved[removalIndex++] = i; 
       } 
      } 
      for(var j=0;j<itemsToBeRemoved.length;j++){ 
       states.splice(itemsToBeRemoved[j],1); 
      } 
     } 

магазин индекс (ы) для удаления и использования states.splice (> индекс <, 1) вместо удаления состояний [я]

удаления оставляет пустой элемент массив в указанном индексе, это может быть причиной вашей проблемы.

+0

его вообще не работает, эта же ошибка продолжает показывать «состояние, уже определенное». I думаю, что нет такого обходного пути для ui-router.Explaining здесь https://github.com/angular-ui/ui-router/вопросы/1095 – sercan

Смежные вопросы