【问题标题】:Changing state does nothing改变状态什么都不做
【发布时间】:2016-05-27 17:44:27
【问题描述】:

我正在尝试回到兄弟状态,就像我在 Ionic 应用程序中所做的很多次一样。但这一次它只是不想这样做。

这是我打电话给$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">

一切都很好,但在这里......发生了什么?

【问题讨论】:

  • 您可以在您的$state.go('^.cat', {'cat': catId}); 之前添加concole.log(catId); 吗?因为如果参数未定义,则不会出错。
  • 成功了,catId 是1
  • 好的。您能否也将console.log 放入您的解析部分(在 menu.cat 状态)和 CatDetailCtrl 中?
  • 当然,console.log 不会在解析中触发,而是在 CatDetailCtrl 中显示 1
  • 这很奇怪。接下来会发生什么?页面是否呈现?控制台中的任何错误?是否展示了“项目”?

标签: angularjs ionic-framework angular-ui-router


【解决方案1】:

错误在于给menu.cat状态的参数类型。

使用typeof 调试后,catId 类型为string,因此不被状态接受,因为它期待int...

总而言之,我需要确保参数的类型符合state 的预期(此处为int)。如果接收到"1"(字符串)而不是1(数字),它将无法工作,完全没有任何错误

很难找到这个,希望这会有所帮助。

【讨论】:

  • 其实我的第一个问题是关于参数的类型。我确定在控制台中你有"1" 而不是1
  • console.log() 在这两种情况下都打印1,刚刚测试过。
  • 对不起,我很惊讶即使console.log("1");' 打印出1
猜你喜欢
  • 2022-08-05
  • 2021-09-07
  • 2017-06-06
  • 2020-12-07
  • 2022-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
相关资源
最近更新 更多