2016-05-27 2 views
4

Я пытаюсь вернуться в родном состоянии, как это было много раз в моем приложении для ионического звука. Но на этот раз он просто не хочет этого делать.Изменение состояния ничего не делает

Вот где я звоню $state:

dataProvider.custom('/api/cats/' + catId + '/', 
       { 
        method: 'PUT', 
        data: data, 
        headers: { 
         'Content-Type': undefined 
        }, 
        transformRequest: function (data, headersGetter) { 
         var formData = new FormData(); 
         angular.forEach(data, function (value, key) { 
          formData.append(key, value); 
         }); 
         headers = headersGetter(); 
         delete headers['Content-Type']; 
         return formData; 
        } 
       }) 
       .then(function (resp) { 
        $state.go('^.cat', {'cat': catId}); 
       }); 

А вот мои состояния:

$stateProvider 
     .state('login', { 
      url: '/login', 
      templateUrl: 'templates/login.html' 
     }) 
     .state('menu', { 
      url: '/menu', 
      abstract: true, 
      templateUrl: 'templates/main.html', 
      onEnter: function($state, Auth){ 
       if(!Auth.isLoggedIn()) { 
        $state.go('login'); 
       } 
      } 
     }) 
     .state('menu.home', { 
      url: '/devel', 
      views: { 
       'menuContent': { 
        templateUrl: 'templates/devel.html', 
       } 
      } 
     }) 
     .state('menu.catspad', { 
      url: '/catspad', 
      views: { 
       'menuContent': { 
        templateUrl: 'templates/catspad.html', 
        controller: 'CatspadCtrl', 
       } 
      } 
     }) 

     .state('menu.cats', { 
      url: '/cats', 
      views: { 
       'menuContent': { 
        templateUrl: 'templates/cats.html', 
        controller: 'CatsCtrl', 
        resolve: { 
         items: ['dataProvider', function (dataProvider) { 
          return dataProvider.fetch('/api/cats/') 
         }] 
        } 
       } 
      } 
     }) 
     .state('menu.cat', { 
      url: '/cat/view/{cat:int}', 
      views: { 
       'menuContent': { 
        templateUrl: 'templates/cat.html', 
        controller: 'CatDetailCtrl', 
        resolve: { 
         items: ['dataProvider', '$stateParams', function(dataProvider, $stateParams) { 
          return dataProvider.fetch('/api/cats/' + $stateParams.cat + '/detail/'); 
         }] 
        } 
       } 
      } 
     }) 

     .state('menu.catAddChange', { 
      url: '/cat/addchange?cat', 
      views: { 
       'menuContent': { 
        templateUrl: 'templates/catAddChange.html', 
        controller: 'CatAddChangeCtrl', 
        resolve: { 
         items: ['dataProvider', '$stateParams', function(dataProvider, $stateParams) 
         { 
          if ($stateParams.cat) { 
           return dataProvider.fetch('/api/cats/' + $stateParams.cat + '/detail/') 
          }}] 
        } 
       } 
      } 
     }) 

     .state('menu.me', { 
      url: '/me', 
      views: { 
       'menuContent': { 
        templateUrl: 'templates/account.html', 
        controller: 'AccountCtrl', 
       } 
      } 
     }) 
     .state('register', { 
      url: '/register', 
      templateUrl: 'templates/register.html' 
     }); 
    $urlRouterProvider.otherwise('/menu/cats'); 
    $ionicConfigProvider.views.transition("none"); 

Соответствующие HTML:

main.html (абстрактное состояние)

<ion-nav-view name="menuContent" class="customViewStyle"></ion-nav-view> 

catAddChange.html:

<ion-view view-title="Change or add a cat" class="animated slideInUp"> 

Все отлично работает везде, но здесь ... Что происходит?

+0

Не могли бы вы добавить 'concole.log (catId);' перед вашим '$ state.go ('^. Cat', {'cat': catId});'? Потому что, если параметр не определен, ошибок не будет. –

+0

Сделал это, catId - '1'. –

+0

Хорошо. Не могли бы вы также добавить 'console.log' в свой раздел разрешений (в состоянии menu.cat) и внутри вашего CatDetailCtrl? –

ответ

2

Ошибка была указана в типе параметра, заданного для состояния menu.cat.

После отладки с typeof, то catId тип был string, поэтому не принято государством, так как он ожидал int ...

Подводя итог, необходимо обеспечить тип параметра является как state предпологает (int здесь). Он не будет работать, если он получит "1" (строка) вместо 1 (номер), без каких-либо ошибок вообще.

Было трудно найти это, надеюсь, это поможет.

+0

Собственно, мой первый вопрос касался типа параметра. Я уверен, что в консоли у вас есть '' 1 "' и NOT '1'. –

+0

'console.log()' печатает '1' в обоих случаях, просто протестировал его. –

+0

Извините, я удивлен, что даже 'console.log (« 1 »);' 'печатает' 1'. –

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