2017-09-27 33 views
0

如果我使用Angular ui路由器撥打$state.go('login'),郊區看起來像這樣。有沒有一種方法使用角度ui路由器不顯示#!/ login?

enter image description here

有沒有一種方法來隱藏#!/login?這是第一次使用角度ui路由器,我甚至不知道這是可能的。 所以我想看到的只有localhost:3000/

+0

將您的「登錄」狀態設置爲使用「/」URL?即''url:''' – Phil

+0

搜索/閱讀更多關於'角度html5模式' – harishr

+0

@harishr我不認爲這適用於這裏 – Phil

回答

2

您可以在ui-router中創建一個沒有url的狀態,在配置狀態時不需要定義url屬性。

像這樣:

angular.module('app').config(function ($stateProvider) { 
    $stateProvider.state('login', { 
     component: 'loginComponent' 
    }); 
}); 

您將無法直接導航到登錄URL。但是您仍然可以使用ui-sref$state.go('login')進行導航。


如果您仍然希望能夠直接導航到登錄頁面,您可以在除上述外,在那裏你指定的URL屬性來配置其他登錄狀態。

angular.module('app').config(function ($stateProvider) { 
    $stateProvider.state('login', { 
     component: 'loginComponent' 
    }).state('loginDirect', { 
     url: '/login', 
     component: 'loginComponent' 
    }); 
}); 
1

試試這個在您的配置文件:

$locationProvider.hashPrefix('');

對於例如

angular.module('myPageApp', ['ui.router']) 
    .config(function ($stateProvider, $locationProvider) { 
    $stateProvider 
    .state('app',{ 
     url: '/app', 
     templateUrl: 'someView.html', 
     controller: 'appController' 
    }) 
    ... 
    $locationProvider.hashPrefix(''); 
}); 
+0

感謝您的回答,但是你的建議將'#!/ login'轉換爲'#/ login'只會在url中刪除'!'。 –

0

在上面的代碼中,可以省略#和!但不能跳過URL中的路由狀態。您可以將URL作爲localhost:3000/login或者您可以將路由設置爲'/'標識符。

如果您的應用程序不使用HTML5模式,或者在不支持HTML5模式的瀏覽器上運行,並且您沒有指定自己的哈希前綴,則客戶端URL現在將包含!字首。

要使您的HTML5模式開啓,請嘗試以下代碼。

app.config(['$locationProvider', function($locationProvider) { 
    $locationProvider.hashPrefix(''); // by default '!' 
    $locationProvider.html5Mode(true); 
}]); 

此外,在HTML的頁眉部分,添加此基礎如下REF類型:

<head> 
    ... 
    <base href="/"> 
</head> 

欲瞭解更多信息,請點擊這裏指這段代碼的應用程序:https://github.com/TheAjinkya/Angular-UI-Router

希望它有幫助!

相關問題