2016-08-02 115 views
0

我正在使用AngularJS ui路由進行路由我想刪除#(來自URL的哈希)。我正在使用此代碼,並在我的index.html文件中使用(base href =「/」)。它工作正常,但當我刷新頁面(http://0.0.0.0:3000/athletepersonalinfo)時,它給我一個錯誤。AngularJS ui路由哈希前綴

.config(function($stateProvider,$locationProvider) { 
    $locationProvider.html5Mode({ enabled: true, requireBase: false }) 
    $stateProvider 
    .state('/', { 
    url: '', 
    templateUrl:HTML.HOME, 
    controller: 'homeController as home' 
    }) 
    .state('home', { 
    url: '/', 
    controller: 'homeController as home', 
    templateUrl: HTML.HOME 
    }) 

    .state('athletepersonalinfo', { 
    url: '/athletepersonalinfo', 
    controller: 'athleteProfileInfo', 
    templateUrl: HTML.ATHLETE_PERSONAL_INFO, 
    authenticate: true 
    }) 
+1

你能詳細說明你的代碼「不起作用」嗎?你在期待什麼,究竟發生了什麼?如果您遇到異常/錯誤,請發佈其發生的行和異常/錯誤的詳細信息。請[編輯]這些細節或我們可能無法提供幫助。 – FrankerZ

+0

@FrankerZ ...我的登陸頁面狀態是家裏,當用戶登錄它重定向到http://0.0.0.0:3000/athletepersonalinfo。它也工作正常,但當我刷新此頁面時,它給出的錯誤,如 Loopback 404錯誤:無法GET/athletepersonalinfo at raiseUrlNotFoundError(/home/ali/Desktop/EmpyresServices/node_modules/loopback/server/middleware/url-not-found.js:20:17) –

+0

要刪除網址中的散列,您還應該處理服務器端 – Weedoze

回答

1

當你點擊刷新時,服務器實際上試圖找到給定的路由是否已被定義/athletepersonalinfo。要真正從網址中刪除#,您必須包含一條get(/*)路線,該路線始終會返回您的index.html頁面。這條路線應該在所有其他路線之後。現在這意味着你的index.html將在沒有定義路由的情況下被提供,比你的客戶端角將處理加載哪個視圖。幾點要作出這樣chages

  • 時由於任何未解決的獲取可以返回您的index.html確保你的路由是有意義像所有的資產/資產/路徑開始注意到,您的所有API調用開始/ API /。

  • 這樣做的好處是,如果您在某些資產上獲得404或api電話,您仍然會得到您的index.html這是錯誤的。但是,使用這種方法,所有你需要做的就是設定的路線是這樣的

    app.get('/:url(api|assets)/*',function(req,res){ 
        res.status(400).send("Not Found") 
    }); 
    
    app.get('/*',function(req,res){ 
        res.sendFile('index.html'); 
    }); 
    
  • 確保*路由所有其他途徑之後定義否則你會越來越index.html的爲每一個請求。

希望這會有所幫助。

+0

SRY的路線,但我沒有得到你的觀點 我server.js文件 app.start =函數(){// 啓動Web服務器 回報pp.listen(function(){0} {0} {0} app.emit('started'); var baseUrl = app.get('url')。replace(/ \/$ /,''); console.log('Web服務器偵聽:%s',baseUrl); if(app.get('loopback-component-explorer')){var explorerPath = app.get('loopback-component-explorer')。 console.log('瀏覽您的REST API在%s%s',baseUrl,explorerPath); } }); }; –