【问题标题】:Ui.Router if $state not found go to url insteadUi.Router 如果未找到 $state 则转到 url
【发布时间】:2016-09-26 14:07:28
【问题描述】:

平台总结:它是一个wordpress后端结合AngularJS前端运行ui.router,开启了html5模式和base href="/",因为堆栈站点在站点的根目录。

问题如下:

1) 首先,在未找到状态时启用 else("/") 之前(例如,当用户单击转到 wordpress 页面或任何其他未定义为状态的内容时),然后应用程序将重定向到主页或“/”; 2) 去掉它之后一切似乎都很好,因为我们可以通过直接访问 url(例如 localhost/post/blah)进入非状态页面,但所有链接都不再起作用。我们的意思是 ui-sref 状态链接和常规的 a href="/whatever/whatever" 都不起作用。浏览器中的窗口地址栏在单击时会更改为相应的链接(或状态),但没有其他反应。

我们正在尝试做的事情:

基本上让链接按照最初的预期工作,如果链接找到状态,则激活该状态,如果没有,则转到预期的链接。

我们已经尝试了各种解决方案,我们在此处搜索并搜索过,但我们似乎无法找到解决方案。最近我们有:

$urlRouterProvider.otherwise(function() {
        window.location.href = 'localhost'+window.location.pathname;
    });

// 一旦窗口打开到页面,就会以无限循环的页面重新加载结束

我们想玩游戏:

$urlRouterProvider.otherwise(function() { window.location.href = 'http://google.com' });

//我们在此处找到此代码,该代码将重定向到另一个页面,这有效,但从一开始仍然存在问题。因此,假设这一点,我们认为解决方案是,当没有找到状态时,上述函数将使用来自链接或地址栏更改或其他任何内容的适当 URL 触发。那么,有什么建议吗?

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

对于那些无状态的 URL,使用

<a href="/link" target="_self">link</a>

【讨论】:

    【解决方案2】:

    我正在使用"angular-ui-router": "0.2.18",下面的代码非常适合我。

    app.config(['$stateProvider', '$urlRouterProvider', 
    
    function($stateProvider, $urlRouterProvider) {
        "use strict";
    
        $stateProvider.state('page1', {
            url: "/page1",
            templateUrl: "page1/page1.tpl.html",
            controller: 'Page1Controller'
    
        }).state('page2', {
            url: "/page2",
            templateUrl: "page2/page2.tpl.html",
            controller: "Page2Controller"
    
        }).state('error', {
            url: "/error",
            templateUrl: "error/error.tpl.html",
            controller: "ErrorController"
        });
    
        $urlRouterProvider.otherwise('/error');
    
    });
    

    如果您想脱离 Angular 上下文并硬重定向到另一个网站,您可以在错误状态控制器中创建重定向调用。

    app.config(['$stateProvider', '$urlRouterProvider', 
    
    function($stateProvider, $urlRouterProvider) {
        "use strict";
    
        $stateProvider.state('page1', {
            url: "/page1",
            templateUrl: "page1/page1.tpl.html",
            controller: 'Page1Controller'
    
        }).state('page2', {
            url: "/page2",
            templateUrl: "page2/page2.tpl.html",
            controller: "Page2Controller"
    
        }).state('error', {
            url: "/error",
            controller: "ErrorController"
        });
    
        $urlRouterProvider.otherwise('/error');
    
    }]);
    
    
    app.controller('ErrorController', ['$window',
    
    function($window) {
        "use strict";
    
        $window.location.href = "http://www.google.com";
    }]);
    

    【讨论】:

    • 那根本没有回答我的问题。
    • 如果您真的想为otherwise 案例创建一个静态网站,您可以在相应的控制器中重定向用户。我将这种行为添加到答案中。
    猜你喜欢
    • 1970-01-01
    • 2011-12-21
    • 2012-05-31
    • 1970-01-01
    • 2019-02-15
    • 2020-08-11
    • 2016-09-01
    • 2021-09-11
    • 2021-12-28
    相关资源
    最近更新 更多