【问题标题】:Ionic (AngularJS) - redirect user and routingIonic (AngularJS) - 重定向用户和路由
【发布时间】:2015-01-16 06:03:40
【问题描述】:

所以我在这个新项目中使用了 Ionic,并且在路由方面需要一点支持(角度 n00b)。

我有这些状态:

$stateProvider.state('map', {
    url: '/map',
    views: {
        map: {
            templateUrl: 'views/map.html',
            controller: 'mapCtrl'
        }
    }
})

.state('help', {
    url: '/help',
    views: {
        help: {
            templateUrl: 'views/help.html'
        }
    }
})

.state('setname', {
    url: '/setname',
    views: {
        setname: {
            templateUrl: 'views/setname.html',
            controller: 'setNameCtrl'
        }
    }
})

并且我希望用户在“myName”为空时尝试访问另一个页面时被重定向到“setname”(将来我会做类似的事情来检查用户是否在允许访问之前登录应用程序)。

这是当前的 HTML,完全不确定...

<ion-tabs class="tabs-positive">
    <ion-tab icon="ion-home" ui-sref="map">
        <ion-nav-view name="map"></ion-nav-view>
    </ion-tab>
    <ion-tab icon="ion-help" ui-sref="help">
        <ion-nav-view name="help"></ion-nav-view>
    </ion-tab>
</ion-tabs>

请帮助解决这个问题,我将不胜感激。

第二个问题,仍然是路由和显示内容:我的应用程序的基础将是地图。我希望用户能够在任何时候非常快速地访问它,所以我希望它在显示另一个页面时始终在后台保持可用(比如说帮助)。因此,每当用户单击给定按钮时,它只会将他带回地图,而不必再次加载它。你会如何建议我这样做?我想过使用 Ionic 的“popover”属性,但我不确定这是否正确:http://ionicframework.com/docs/api/service/$ionicPopover/

非常感谢!

【问题讨论】:

  • 啊,我知道为什么“ion navview 为空”。你的html搞砸了。看看这个视频:learn.ionicframework.com/videos/ion-tabs-directive。总是只有一个导航视图。你有 2 个。你只需要一个。使用模板。这一切都在这个视频中得到解释。好看的发展中
  • 或者从您的 cli 中的离子模板开始您的项目。就像选项卡式模板一样。
  • 这是来自模板^^
  • 看起来他们改变了他们的导航视图......疯了。

标签: javascript angularjs cordova ionic-framework angularjs-routing


【解决方案1】:

如果 myName 属性为真/假,您可以包含一个服务,它会检查每个控制器。 喜欢:

Service.checkMyName($scope).then(function(response){
   if(!response){
      $location.path("/yourPath");
   }
});

第二种方法: 可能不好的方法,但在我看来更流畅的方法是将 myName 属性注入 rootScope。所以你可以检查每个网站:

if(!$rootScope.myName){ $location.path("/yourPath");

如果未指定值 myName,现在用户将被重定向到页面“yourPath”。

您的第二个问题:您应该查看http cache option:http 请求只执行一次。数据已缓存,因此用户可以看到它而不会闪烁。

希望对你有帮助。

【讨论】:

  • 谢谢,它正在工作!我使用了你的 rootscope 解决方案,而 $state.go quicoli 给了我。控制台只抛出一个奇怪的错误,告诉我你是否知道这是什么:“TypeError:scrollView is null”。只有在使用 $state.go 或 $location 进行重定向时才会发生这种情况。此外,对于第二点,我知道 HTTP 请求已缓存,但地图加载在切片中,并且仍需要获取切片。另外,如果用户在另一个屏幕上并且仍在移动(例如在公共汽车中),我希望地图继续工作并使用 GPS 跟踪他,所以当他回到地图时已经很好了
  • @JeremyBelolo 要确定您所说的 TyperError,最好查看控制台输出,因为它有错误来源:文件(代码行)...
  • Firebug : "TypeError: scrollView is null 127.0.0.1/myApp/www/lib/ionic/js/ionic.bundle.js Line 39815" ... Chrome 控制台: "Uncaught TypeError: Cannot read property 'options' of null ionic.bundle.js:39815(anonymous function ) ionic.bundle.js:39815 onPlatformReady ionic.bundle.js:2241 onWindowLoad ionic.bundle.js:2220"
  • 很高兴它有帮助。所以你可以接受这个答案;)你的第二个问题:你可以把地图放到一个模式中。文档在这里:ionicframework.com/docs/api/service/$ionicModal。关闭模态时有一个 $destroy 函数。尽量不要调用这个函数。然后模态应该在后台工作。但要注意内存问题。
  • 查看有问题的评论
【解决方案2】:

第一个问题 你应该使用 $state.go,例如:

.controller('testCtrl', function($scope, $state) {
$scope.data = {};

$scope.save = function(){
        if ($scope.data.Name == ""){
            $state.go("setname");
        }

})

【讨论】:

  • 感谢您的“$state.go”命令!如果您可以看看我对@m1crdy 回答的评论,看看您是否有想法,那您将非常好:) 祝您有美好的一天/晚上/晚上!