javascript - AngularJS使用mvc在spa模型中路由无限循环

标签 javascript asp.net-mvc angularjs asp.net-mvc-4 single-page-application

我在网上尝试了很多其他帖子,这些帖子似乎与我的问题相同,但没有成功。

我有这个菜单:

<ul class="nav navbar-nav">
    <li class="active"><a href="#Painel/1">Novas</a></li>
    <li><a href="#Painel/2">Todas</a></li>
    <li><a href="#Painel/3">Finalizadas</a></li>
    <li><a href="#Painel/4">Pendentes</a></li>
</ul>

非常简单的导航栏。此路由设置:

module.config(["$routeProvider", "$locationProvider", function($routeProvider, $locationProvider)
{
    //$locationProvider.html5Mode(true);

    $routeProvider
        .when('/Painel/:painelId/', 
        {
            templateUrl : function(params)
            {
                return "/Painel/Index/" + params.painelId;
            },
            controller  : 'painelController'
        })
        .otherwise(
        {
            redirectTo: "/Painel"
        });
    }]);
}

我的 MVC Controller :

public class PainelController : Controller
{
    public ActionResult Index(int? id))
    {
        return View();
    }
}

最后是我的 Angular Controller :

module.controller('painelController', ["$scope", "$routeParams", function ($scope, $routeParams)
{
    debugger;
}]);

它的架构非常简单,但是 Angular 无限循环其 Controller 。我小心翼翼地将我的 templateUrl/ 相对设置,正如许多帖子建议的那样,但它不起作用。它可以将参数发送到 mvc Action,但随后它会启动循环,并在 Angular 的 Controller 调试器上永远停止。

我能做什么?

最佳答案

你的问题是 :painelId 不是可选的,因此你会无限地陷入 else() 重定向。使 :painelId 可选,例如

'/Painel/:painelId?/'

这应该可以解决您的问题。如果您没有使用支持可选参数的 Angular 版本,那么您将需要添加另一个 when() 来覆盖 '/Painel' 路由。

关于javascript - AngularJS使用mvc在spa模型中路由无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24255124/

相关文章:

javascript - 如何通过 ExecuteScript 添加自己的监听器来捕获 "load"事件?

c# - Global.asax 中 DbContext 的静态字段与 Controller 类中 DbContext 的实例字段?

javascript - 使用 Jquery 根据复选框选择更高效地添加和删除类

html - 使用 AngularJS 显示 json 数组的元素

javascript - 如何发起一个简单的 CORS 请求?

javascript - 通过使用 Javascript 设置不透明度淡入元素

javascript - 如何启用禁用的文本字段?

javascript - 循环不适用于 react

c# - 从自定义属性访问父类

javascript - AngularJS : Interpolating attributes