Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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
Angularjs-一条路线两种可能的视图_Angularjs_Controller_Routes_Views - Fatal编程技术网

Angularjs-一条路线两种可能的视图

Angularjs-一条路线两种可能的视图,angularjs,controller,routes,views,Angularjs,Controller,Routes,Views,我希望能够为两个不同的视图使用一条路线 比如现在,我有两条路线 一个是/home,它是用户可以注册/登录的主页 另一个是/feed,这是用户登录时 我想做的是有一条单一的路线,比如twitter: twitter.com/ 首先,他们要求你登录 twitter.com/ 我们可以看到我们的饲料墙。而且还是一样的“/”。希望我清楚:) 这是我目前的代码: $stateProvider .state('index', { url: '/',

我希望能够为两个不同的视图使用一条路线

比如现在,我有两条路线

一个是/home,它是用户可以注册/登录的主页

另一个是/feed,这是用户登录时

我想做的是有一条单一的路线,比如twitter:

twitter.com/

首先,他们要求你登录

twitter.com/

我们可以看到我们的饲料墙。而且还是一样的“/”。希望我清楚:)

这是我目前的代码:

$stateProvider
            .state('index', {
                url: '/',
                controller: function($state, $auth) {
                    $auth.validateUser()
                        .then(function(resp) {
                            $state.go('feed');
                        })
                        .catch(function(resp) {
                            $state.go('home');
                        });
                }
            })

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

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

据我所知,ui路由器不支持这样的功能,所以你必须自己做

您可以做的是像在“index”中那样只定义一个状态,而不是在控制器中执行$auth逻辑,而是在“resolve”部分中执行

然后,您可以使用“ng if”和“ng include”定义要加载的.html文件和控制器,如下所示:

app.js

$stateProvider
        .state('index', {
            url: '/',
            resolve: {
                isAuthenticated: function() {
                   return $auth.validateUser().then(function(res) {
                        return true;
                   }, function(error) {
                        return false;
                   });
                }
            },
            controller: function($scope, isAuthenticated) {
               $scope.isAuthenticated = isAuthenticated;
            },
            templateUrl: 'index.html'
        })
index.html

<div ng-if="isAuthenticated">
  <div ng-include="'feed.html'"></div>
</div>

<div ng-if="!isAuthenticated">
  <div ng-include="'login.html'"></div>
</div>