角度控制器被调用两次(多次)

时间:2017-04-07 14:57:56

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

我在Ionic应用程序中调用控制器两次出现问题

这些是我的州

$stateProvider.state('connected', {
        abstract: true,
        url: '/{deviceId}',
        template: '<ion-nav-view/>'
    }).state('connected.presets', {
        abstract: true,
        url: '/presets/{presetType}',
        template: '<ion-nav-view/>'
    }).state('connected.presets.index', {
        cache: false,
        url: '/',
        templateUrl: 'views/presets/index.html',
        controller: 'PresetsIndexController'
    });

我尝试在这样的状态之间导航

$state.go('.', {presetType: 'default'});
// OR
$state.go('.', {presetType: 'custom'});

我无法找到原因,只是通过更新PresetsIndexController参数来调用presetType两次。

我发现有人在这个问题上遇到了同样的问题http://plnkr.co/edit/znIa9XU9JsyUDjum2HHx?p=preview。要查看错误,请打开javascript控制台并单击重新加载图标,您应该在输出中看到hey两次。

我也观看了$stateChangeStart事件,但似乎被解雇了一次。

我已经显示了来自控制器的堆栈跟踪,而ion-nav-view似乎是通话的根源。因此,根据我的尝试,似乎ion-nav-view搞砸了所有事情,但不知道为什么以及如何解决这个......

编辑1

如果我将presetType参数移动到最终状态,则控制器不会被调用两次。

.state('connected.presets', {
        abstract: true,
        url: '/presets',
        template: '<ion-nav-view/>'
    }).state('connected.presets.index', {
        cache: false,
        url: '/{presetType}',
        templateUrl: 'views/presets/index.html',
        controller: 'PresetsIndexController'
    })

但这对我来说不是一个有效的解决方案,因为我有connected.presets状态的其他孩子,我想继承presetType

编辑2

似乎问题来自stateParams在父状态上的更改。我的(糟糕的)解决方法是避免在父状态上更改stateParams ...

我不想更新ui-router lib,因为它与我的Ionic版本相关联。我认为其他开发人员也会遇到ui-router的问题,因为Ionic在v2及之后放弃了它。

我对这种解决方法不满意,但嘿,它正在工作。

0 个答案:

没有答案