【问题标题】:In AngularJS how to redirect from on controller to another?在AngularJS中如何从一个控制器重定向到另一个?
【发布时间】:2018-02-24 11:30:38
【问题描述】:

假设我有一个 AngularJS,其状态/控制器 URL 为:

url: '/myurl'

在不同的控制器中(例如按下按钮),我会:

$window.location.href = '/myurl';

跳转到另一个页面。但是,是否有一种“AngularJS 本机”在页面之间切换的方式?

【问题讨论】:

  • 您使用的是ng-routes 还是ui-router?您使用的是哪个版本?

标签: javascript angularjs angular-ui-router


【解决方案1】:

每个页面都有 $state,您也可以在状态之间传输数据。使用流动函数更改状态并将其作为依赖项首先注入到您的控制器中。

 $state.go('your-new-state', {
        ...params 
    });

使用 ui 路由器。

【讨论】:

    【解决方案2】:

    你可以用不同的方式来做。取决于你想要什么以及你使用什么样的路由器:

    如果您使用的是ng-route

    $routeProvider
        .when('/main' , {templateUrl: 'main.html'})
        .when('/somePage', {templateUrl: 'somePage.html'})
        .otherwise({redirectTo: '/main'});
    
    app.controller('myCtrl', function ($location) {
        $scope.click = function () {
            $location.path('/somePage');
        }
    });
    

    如果您使用的是ui-router

    $stateProvider
        .state('main', {
            url: '/main',
            templateUrl: 'main.html'
        })
        .state('somePage', {
            url: '/somePage/:someParam',
            templateUrl: 'somePage.html'
        });
    
    app.controller('myCtrl', function ($state) {
        $scope.click = function () {
            $state.go('somePage', { someParam: 'someValue'});
        }
    });
    

    如果您使用的是ui-router >= 版本1.0.0

    这将向您展示如何处理基于状态的重定向。在某些情况下,当您必须根据某些条件处理该路由上的重定向时,这可能会有所帮助。

    $stateProvider
        .state('main', {
            url: '/main',
            templateUrl: 'main.html',
            redirectTo: (trans) => {
                if (trans.params().redirectToSomePage) {
                    return { state: 'somePage', params: { someParam: 'someValue' } };
                }
            }
        })
        .state('somePage', {
            url: '/somePage/:someParam',
            templateUrl: 'somePage.html'
        });
    

    【讨论】:

      【解决方案3】:

      如果你使用 ngRoute,你可以使用 $location

      例如

      $location.path('/myurl');
      

      请注意,您必须在控制器中注入 $location

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-17
        • 1970-01-01
        • 2018-02-11
        • 1970-01-01
        • 2011-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多