如果找不到$ state,则Ui.Router转到url而不是

时间:2016-05-28 08:38:11

标签: javascript angularjs

平台上的摘要:它是一个wordpress后端,结合运行ui.router的AngularJS前端,打开了html5模式,并且自站点根目录中的堆栈站点以来基于href =“/”。

问题如下:

1)首先关闭,否则启用之前(“/”)如果未找到状态(例如当用户点击进入wordpress页面或任何未定义为状态的其他内容时),则应用程序将重定向到主页或“/”; 2)关闭之后一切似乎都很好,因为我们被允许通过直接访问url(例如localhost / post / blah)进入非状态页面,但是没有一个链接可以工作了。我们的意思是既不是ui-sref状态链接,也不是常规的工作。浏览器中的窗口地址栏在单击时会更改为相应的链接(或状态),但不会发生任何其他情况。

我们要做的是:

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

我们尝试过各种各样的解决方案,我们在这里搜索并搜索过,但我们似乎找不到修复方法。最近我们有:

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

//一旦窗口打开到页面

,这将以无限循环的页面重新加载结束

我们试图发挥作用:

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

//我们在这里找到了这个代码,它会重定向到另一个页面并且这个有效,但从一开始就有问题。所以假设这个,我们认为解决方案是当没有找到状态时,上面的函数会从链接或地址栏更改或其他任何内容触发相应的URL。那么,有什么建议吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我正在使用"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";
}]);