Ionic $state.go 在设备上不起作用

Posted

技术标签:

【中文标题】Ionic $state.go 在设备上不起作用【英文标题】:Ionic $state.go not working on device 【发布时间】:2015-08-12 08:36:21 【问题描述】:

我目前正在开发一个应用程序,使用 Ionic 构建。我的问题是 $state.go 只能在浏览器中运行,而不能在手机上运行。这似乎是一个常见问题,但是在阅读了很多相同问题的答案后,我仍然无法弄清楚如何解决它。

一般的修复方法似乎是确保您使用相对 URL,如下所述:Using Angular UI-Router with Phonegap 但我仍然无法让它工作。我错过了什么?

plunker 链接:http://plnkr.co/edit/qFJ1Ld6bhKvKMkSmYQC8?p=preview

App.js 结构:

    ....
    $stateProvider
      .state('parent', 
      url: "/",
      templateUrl: "parent.html"
    )
    .state('parent.child', 
      url: "child",
      templateUrl: "child.html"
    )
    $urlRouterProvider.otherwise("/")
    )
    ....

【问题讨论】:

你试过在函数中做 $state.go 吗? 还没有 - 将尝试这样做! 我更新了 plunker 以便 $state.go 在“菜单 1”的函数中。在设备上对其进行测试时,它仅在单击菜单后滑动或向下滑动后才会出现。所以场景是这样的,我单击菜单 1 - 没有任何反应 - 向上或向下滑动,然后出现视图。我使用 Ionic View 在移动设备上对其进行了测试 【参考方案1】:

要让 state.go 工作,你必须将 $state 依赖注入你的控制器

app.controller('ParentCtrl', ['$scope', '$state', function($scope, $state) 
  $scope.$state = $state
]);

app.controller('MenuCtrl', ['$scope', '$state', function($scope, $state)

    $scope.goTo = function()
        $state.go('menu.kategorier');
    

]);

你必须在 $stateProvider 中注册你想要去的状态

$stateProvider
.state('menu.kategorier', ...)

在这种情况下,您必须从父状态(如“菜单”)进入该状态。您不能将状态从“父”更改为“menu.kategorier”,但您可以从“父”转到“父子”

【讨论】:

“menu.kategorier”是复制粘贴错误。因为这是我在设备上测试时使用的。为了让 plunker 更简单,我使用了 parent.child。因此,在测试它时,我使用了正确的 $stateProvider。 忘记补充了,更正控制器中的 $state 依赖项似乎并不能解决问题,我必须在单击菜单后滑动才能显示视图。【参考方案2】:

我通过更改嵌套视图的设置解决了这个问题,基于此示例:http://codepen.io/mhartington/pen/Bicmo

这里是我的plunker,有兴趣的人:

Plunker:http://plnkr.co/edit/2m5bljMntpq4P2ccLrPD?p=preview

app.js 结构:

    $stateProvider
      .state('eventmenu', 
      url: "/event",
      abstract: true,
      template: "<ion-nav-view name='menuContent'></ion-nav-view>"
      )

      .state('eventmenu.home', 
      url: "/home",
      views: 
        'menuContent' :
          templateUrl: "home.html"
        
      
     )

     .state('eventmenu.home.home1', 
     url: "/home1",
     views: 
       'inception' :
         templateUrl: "home1.html"
       
     
    )

【讨论】:

以上是关于Ionic $state.go 在设备上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Ionic/Angular HTTP post 请求在 android 上不起作用

ionic cordovaSQLite 插件在物理设备上不起作用

POST 请求在 IONIC 应用程序中的 iOS 设备上不起作用

Ionic 3:css的一部分在Android平台上不起作用

输入最大长度在 Android -Ionic 上不起作用

Ionic - OneSignal 在 iOS 13.x 上不起作用