所以,我看到你是一个 .NET MVC 开发人员......
让我们看一下 Actions 在 .NET MVC 中做了什么:它们返回 ActionResults……这确实是应该运行并从体系结构返回的视图和模型的清单。MVC 中的“控制器”是此类操作的集合,并且可能包含这些操作之间的一些共享逻辑,这些逻辑以私有方法或对该类的共享依赖项的形式存在。
现在让我们看看 Angular 在做什么:Angular 有一次调用控制器函数,作为构造函数,通常是为了设置一个 $scope 对象,该对象将充当(某种)作为你的“模型”。Angular 中的每个控制器(一般来说)都与一种且唯一一种设置 $scope** 的方法相关联。一旦该控制器被处理,$digest 会在它改变的 $scope 上调用,然后将其应用于绑定到范围的视图......这是由元素与您的 ng-controller 封装的 html(或ng-view) 属性。
所以..问题,你可以根据路由参数动态加载模板吗?是的。你绝对可以。最简单的方法是将您的请求路由到一个模板,该模板只包含一个ng-include
您更改的 div 和一个模板。
在您的路线中:
$routeProvider.when('/:controller/:action', {
controller: 'DynamicCtrl',
template: '<div ng-include="include"></div>'
});
然后你的动态控制器声明:
app.controller('DynamicCtrl', function($scope, $routeParams) {
$scope.include = $routeParams.controller + '/' + $routeParams.action;
});
MyController/MyAction(我假设您可能使用 Razor 生成)应该返回如下内容:
<div ng-controller="MyActionCtrl">
do stuff!
</div>
...从那里您将自己定义 MyActionCtrl 控制器。
你能弯曲架构使其成为“ASP.Net MVC-esque”,因为“一个控制器”中有一大堆“动作”函数来决定你的视图的整个行为吗?是的......但不是没有让你的应用程序真的很傻,使用 switch 语句等......所以你可能不想这样做。
最后,您将不得不摆脱 ASP.Net MVC 使用 Angular 的“控制器和动作”的思维定势。这是一个 MVC 架构,但是 MVC != "Controllers && actions"。
** Angular 也会创建控制器实例并将其保存为对象,但该功能在 Angular 开发中很少使用,而且我在这里不谈论它。)