我见过的大多数 AngularJS 控制器示例,通常都有一个单独的操作方法,可以为视图连接所有内容。另一方面,在使用 MVC 模式而不是 AngularJS 的 MVW 的控制器中,每个控制器通常有多个操作方法,但 AngularJS 似乎并非如此。
如果可以将任意数量的执行行为的方法连接到 $scope(或其他对象),这似乎与 MVC 的操作方法相同,因为它们不会自动接受直接路由输入。
我很感兴趣,因为我正在尝试将现有的 Asp.net MVC 应用程序转换为 Angular,并且我正在尝试为控制器确定最佳的组织分解。
我的各种假设是否正确?
AngularJS 控制器是否曾经使用过一种以上的操作/设置方法?
角度控制器是否曾经分解为单独的动作?还是角度控制器或多或少有一个动作,尽管路由和视图可能不同?
更新:
请求的示例 - AngularJS 控制器:
myApp.controller('DoubleController', ['$scope', function($scope) {
$scope.double = function(value) { return value * 2; };
}]);
Asp.Net 控制器 MVC 示例:
public class CardController : Controller
{
private readonly IService _service;
public CardController(IService service)
{
_service = service;
}
public ActionResult Index(Guid gameId)
{
var model = _service.GenerateCardBuyDisplayModel(gameId);
return View(model);
}
public ActionResult BuyCards(ExecuteBuyModel input)
{
_service.ExecuteBuy(input.GameId, input.CardsToBuy);
return RedirectToAction("Index", "Game", new { id = input.GameId});
}
}
Ruby on Rails 控制器示例:
class ClientsController < ApplicationController
# This action uses query string parameters because it gets run
# by an HTTP GET request, but this does not make any difference
# to the way in which the parameters are accessed. The URL for
# this action would look like this in order to list activated
# clients: /clients?status=activated
def index
if params[:status] == "activated"
@clients = Client.activated
else
@clients = Client.inactivated
end
end
# This action uses POST parameters. They are most likely coming
# from an HTML form which the user has submitted. The URL for
# this RESTful request will be "/clients", and the data will be
# sent as part of the request body.
def create
@client = Client.new(params[:client])
if @client.save
redirect_to @client
else
# This line overrides the default rendering behavior, which
# would have been to render the "create" view.
render "new"
end
end
end
如果你看这三个例子,AngularJS 只有一个构造函数/设置方法,而 Asp.net MVC 例子有一个构造函数和两个动作方法。 Ruby of rails 例子甚至没有可见的构造函数,只是动作方法。Asp.net MVC 示例(或 Ruby on Rails 示例)类似于其他 MVC 实现中的操作数量。在 AngularJS 中,我猜只有一个动作/构造函数方法,其中一个会附加任何额外的行为。另一方面,Asp.net MVC 示例有一个构造函数和两个动作方法,它们都可以以不同的方式路由到。类似于单个 AngularJS 委托人/动作。