2016-11-18 31 views
2

聯繫時爲什麼不會加載我AngularJS主頁這是我的家,index.js文件從自身

var homeIndexModule = angular.module("homeIndex", ["ngRoute"]); 

homeIndexModule.config(["$routeProvider", function ($routeProvider) { 

    $routeProvider.when("/", { 
     templateUrl: "/templates/topicsView.html", 
     controller: topicsController 
    }) 
    .when("/newmessage", { 
     templateUrl: "/templates/newTopicView.html", 
     controller: newTopicController 
    }) 
    .when("/message/:id", { 
     templateUrl: "/templates/singleTopicView.html", 
     controller: singleTopicController 
    }) 
    .otherwise({ redirectTo: "/" }); 

}]); 

我有一個鏈接到四個頁面基本的HTML頁面。

<ul> 
    <li>@Html.ActionLink("Home", "Index", "Home")</li> 
    <li>@Html.ActionLink("Contact", "Contact", "Home")</li> 
    <li>@Html.ActionLink("About", "About", "Home")</li> 
    <li>@Html.ActionLink("My Messages", "MyMessages", "Home")</li> 
</ul> 

當網站加載它去 「的http:/本地主機:51264 /#/」,它加載主頁,一切工作正常(以下簡稱 「/templates/topicsView.html」 頁)。但是,如果(從該頁面)我再次單擊主頁鏈接,它將轉到「http://localhost:51264/#」,不帶斜槓並且不會加載topicsView.html。如果我把斜槓放回去,它會很好地加載。

如果我從聯繫人頁面訪問主頁它正確加載的「http:/本地主機:51264 /#/」

如果「/#/」是這很好網頁右側的點,只要因爲我可以確保如果有人訪問「/#」,它會在那裏重定向。

+1

http://stackoverflow.com/questions/29074401/route-to-different-viewuse-html-actionlink-and的可能的複製-ng - 視圖 - 在 - 視圖 - 在-ASP淨MVC – maurycy

回答

0

請在你的頁面的<head>標籤添加<base>標籤

<head> 
    <base href="/"> 
    //Note:- But when you go live replace above line by "sub-context" of your Application URL 
    //e.g Your application is running on www.example.com/testApp/ 
    //then change above <base> tag to <base href="/testApp/"> 
    ... 
</head> 

另外, 如果你想從URL擺脫「#」,那麼請使用以下代碼

app.config(['$locationProvider', function ($locationProvider) {   

    $locationProvider.html5Mode({ 
     enabled: true, 
     requireBase: false 
    }); 
}]) 

鏈接參考:https://docs.angularjs.org/error/$location/nobase

希望此解決方案可以幫助您解決您的問題

-1

我沒有測試它自己,但我認爲這種變化將工作:

<ul> 
    <li>@Html.ActionLink("Home", "#/", "Home")</li> 
    <li>@Html.ActionLink("Contact", "Contact", "Home")</li> 
    <li>@Html.ActionLink("About", "About", "Home")</li> 
    <li>@Html.ActionLink("My Messages", "MyMessages", "Home")</li> 
</ul> 

只有改變上面的代碼是"Index"成爲"#/",讓您的角度路由可以正常工作。

0

也許我的回答HERE指南的第1部分& 2您處理路線和...

1)從URL

app.config(['$locationProvider', function ($locationProvider) { 

    $routeProvider.when('/any_route', { 
     templateUrl: 'view.html', 
     controller: 'Controller' 
    }) 

    $locationProvider.html5Mode({ 
     enabled: true, 
     requireBase: false 
    }); 

}]); 

2)檢查您的MVC刪除#路線

直到現在也許你有一個HomeController返回index.cshtml並啓動你的Angular App。
從Angular路由中刪除#後,您必須爲所有路由設置MapRoute
因爲在這種情況下,您第一次嘗試訪問類似www.site.com/any_route的路線時,Angular App尚未加載,因此它嘗試從MVC路由中獲取頁面。但在此之後$routeProvider履行職責。

routes.MapRoute(
    name: "any_route", 
    url: "any_route", 
    defaults: new { 
     controller = "Home", 
     action = "Index", 
     id = UrlParameter.Optional 
    } 
); 
0

我有幾個想法的

  • 手動配置的路由爲空位置

不同的是URL的最後一個斜線。當我第一次點擊「#/」時,將URL重定向到#//,並加載ng-view。當我點擊它第二次,因爲目前的網址是#//,它不是在配置相同的URL(「#/」)我點擊,角觸發位置變化的方法,並重新加載NG-看來,除了Angular重新將URL重定向到#//。下次我點擊URL時,角度會再次做同樣的事情。

在這種情況下,我們需要增加另外一個配置空URL,像

$routeProvider.when("", { 
     templateUrl: "/templates/topicsView.html", 
     controller: topicsController 
    }) 

現在,如果該URL爲空或以斜線,那麼它會去到正確的位置。

  • 你去強制重新加載URL

否則:你應該使用$route.reload()強制重裝。但它使加載頁面

並請看一看這個discussions