4

我见过的大多数 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 委托人/动作。

4

1 回答 1

1

据我所知,AngularJS 控制器没有传统的操作方法,如 MVC 控制器。相反,无论控制器可以做什么,都必须在单个构造函数方法中定义或使用应用程序配置中的路由进行配置。如果您需要与构造函数不同的设置,那么它可能是使用新控制器的好地方。

后来我在有角的 IRC 聊天室里问:

Angular 控制器并没有像其他 MVC 实现(如 Ruby on Rails 或 Asp.net MVC)中那样的操作方法?对?

华夫饼干回应:

基本上什么都不需要或给你

它只是准系统结构,没有要扩展的“基础”对象或要实现的接口

robdubya 还提到:

除非你想获得所有未来性感的 https://gist.github.com/robwormald/bc87cb187e8f96c4e5f0

于 2014-05-07T14:17:17.510 回答