Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 爱奥尼亚(AngularJS)-重定向用户和路由_Javascript_Angularjs_Cordova_Ionic Framework_Angularjs Routing - Fatal编程技术网

Javascript 爱奥尼亚(AngularJS)-重定向用户和路由

Javascript 爱奥尼亚(AngularJS)-重定向用户和路由,javascript,angularjs,cordova,ionic-framework,angularjs-routing,Javascript,Angularjs,Cordova,Ionic Framework,Angularjs Routing,所以我在这个新项目中使用了Ionic,在路由方面需要一些支持(AngularN00B) 我有以下几个州: $stateProvider.state('map', { url: '/map', views: { map: { templateUrl: 'views/map.html', controller: 'mapCtrl' } } }) .state('help', { url:

所以我在这个新项目中使用了Ionic,在路由方面需要一些支持(AngularN00B)

我有以下几个州:

$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”属性,但我不确定这是否正确:$ionicPopover/

多谢各位

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

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

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

})

如果myName属性为true/false,则可以包含一个服务,该服务将检查每个控制器。 比如:

第二种方法: 可能是不好的方法,但在我看来更平滑的方法是,将myName属性注入到rootScope中。因此,您可以查看每个站点:

if(!$rootScope.myName){ $location.path("/yourPath");
现在,如果没有指定值myName,用户将被重定向到页面“yourPath”

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


希望能有帮助。

谢谢,它起作用了!我使用了你的rootscope解决方案,还有$state.go quicoli给我的。控制台只抛出了一个奇怪的错误,如果您知道这是什么,请告诉我:“TypeError:scrollView为null”。只有在使用$state.go或$location重定向时才会发生这种情况。另外,对于第二点,我知道HTTP请求是缓存的,但是映射加载在分片中,并且仍然需要获取分片。另外,如果用户在另一个屏幕上,并且仍然在移动(例如在公共汽车上),我希望地图继续工作,并使用GPS跟踪他,因此当他回到屏幕上时,地图已经在移动了good@JeremyBelolo要识别您所谈论的TyperError,最好查看控制台输出,因为它有错误源:file(代码行)…Firebug:“TypeError:scrollView为空行39815”…Chrome控制台:“未捕获的TypeError:无法读取空ionic.bundle.js:39815(匿名函数)ionic.bundle.js:39815 onPlatformReady ionic.bundle.js:2241 onWindowLoad ionic.bundle.js:2220”的属性“很高兴它有帮助。所以你可以接受这个答案;)你的第二个问题:你可以把地图放在一个模态中。此处的文档:。关闭模式时有一个$destroy函数。尽量不要调用这个函数。那么模态应该在后台工作。但是要注意内存问题。请参阅问题中的注释谢谢您使用“$state.go”命令!如果你能看看我对@m1crdy答案的评论,看看你是否有什么想法,那将是非常感谢你:)祝你有一个美好的一天/晚上/晚上!啊,我知道为什么“ion navview为空”。你的html搞乱了。请看此视频:。始终只有一个导航视图。你有两个。你只需要一个。使用模板。在这段视频中,所有这些都得到了解释。外观良好—从cli中的ionic模板开发或启动项目。就像选项卡式模板。这是来自模板^^^看起来他们改变了他们的导航视图类型。。。疯子
if(!$rootScope.myName){ $location.path("/yourPath");