我是 AngularJS 的新手。只是想尝试使用 $routeProvider 的相对 URL。
场景如下:
我有一个“编辑”页面,该页面的 ASP.NET MVC 链接为:
http://localhost/Workflow/Edit
因此 ASP.NET MVC Controller 是“WorkflowController”,操作是“Edit”。对于局部 View ,我有 Controller 操作,每个操作都返回一个局部 View ,如下所示:
public ActionResult WorkflowTransition()
{
return PartialView("WorkflowTransition");
}
public ActionResult WorkflowTransitionApprovers()
{
return PartialView("WorkflowTransitionApprovers");
}
以下是 AngularJS 模块配置 - 注意:为每个路由调用 PartialView(如上所述)(这可能是不正确的):
$routeProvider.when('Workflow/WorkflowTransition', {
templateUrl: '/Workflow/WorkflowTransition',
controller: 'transitionCtrl',
});
$routeProvider.when('Workflow/WorkflowTransitionApprovers', {
templateUrl: '/Workflow/WorkflowTransitionApprovers',
controller: 'approversCtrl'
$routeProvider.otherwise({
redirectTo: '/'
});
注意:我没有指定以下任何一项:
$locationProvider.html5Mode(false);
或
$locationProvider.html5Mode(false).hashPrefix('!');
href 链接是这样指定的:
<a href="#/Workflow/WorkflowTransition">{{workflow.Identifier}}</a>
这会生成这种形式的链接:
http://localhost/Workflow/Edit#/Workflow/WorkflowTransition
这显然是错误的(点击链接没有做任何事情可能是因为浏览器试图导航到散列),所以我尝试了前导“/”,但也没有成功:
<a href="/#/Workflow/WorkflowTransition">{{workflow.Identifier}}</a>
如果我直接导航部分内容,即 http://localhost/Workflow/WorkflowTransition
,浏览器会按原样呈现 html(连同 angularjs 花括号 {{}})。
我的问题是:AngularJS 如何处理“#”或“#!”在确定相对 URL 时?例如执行此路由(假设我从 anchor 标记中的 URL 中删除/Edit 部分):
$routeProvider.when('Workflow/WorkflowTransition',
匹配 URL:
http://localhost/Workflow/#WorkflowTransition
?
它是否从 URL 中删除“#”,然后根据 $routeProvider.when() 中的 URL 模式检查它?
有人可以为相对 URL 推荐正确的路由吗?
最佳答案
根据我的观察,匹配路由时必须删除散列。我有一个链接
<a href="#Objects">
产生 URL
http://localhost:55033/#/Objects
我的路线设置是
$routeProvider.when("/Objects", {
templateUrl: "objects.html",
controller: ObjectCtrl
});
这按预期工作,引入了正确的部分。请注意,在这种情况下,我不是通过 ASP.NET MVC Controller 呈现部分。相反,我有 objects.html 作为纯 html 文件,我在 href 中使用散列,因此 ASP.NET MVC 路由不会启动。
关于asp.net-mvc - AngularJS $routeProvider 和 ASP.NET MVC 中的相对 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14993444/