在AngularJS中将业务逻辑与控制器分开

时间:2015-03-13 13:00:12

标签: angularjs model-view-controller

我遇到过很多文章,介绍如何将业务逻辑与控制器分开,并将它们保存在不同的层中。至于角度,我们在服务,工厂等中添加所有逻辑。

但是我遇到了以下代码行

angular.module('myApp').controller(function($scope,$userService) {    
  $scope.users = $userService.get('/users');    
  $scope.add = function() {
    // do something
  };    
});

人们仍然认为我们仍然在控制器中添加逻辑。如果这是真的,那么在我的控制器中初始化数据的最佳方法是什么,以便我可以避免在我的控制器中使用逻辑或任何可以帮助我实现这些目标的最佳实践。

P.S我正在严格要求为Angular提出建议。

2 个答案:

答案 0 :(得分:2)

在给出的代码示例中,您可以使用资源(https://docs.angularjs.org/api/ngResource/service/ $ resource)来抽象URL详细信息。然后代码可能如下所示:

angular.module('myApp').controller(function($scope,Users) {    
  $scope.users = Users.query();    
  $scope.add = function() {
    // do something
  };    
});

我假设 add 函数与模板的ng-click事件相关联,在这种情况下看起来没问题。如果代替 //执行某些操作,则会有大量代码,或许可以将其移动到服务中。

取自AngularJS Docs

  

控制器是"类"或"构造函数"那是   负责提供支持的应用程序行为   模板中的声明性标记。

根据经验,如果它不是应用程序行为,例如更新模型,处理点击事件等,然后抽象成服务。

答案 1 :(得分:2)

肯定有"逻辑"在控制器中,但逻辑应限于定义ViewModel并通过对来自View和模型的事件做出反应来更改它。

逻辑处理应用程序的状态,或控制器具有权威性的应用程序视图的一部分。

控制器中应该的逻辑与后端知识,模型数据的操纵,View / DOM的操纵,以及没有'的业务逻辑有关。 t直接与数据的呈现方式有关。

你的例子很好,除了"/users"部分,它可以从服务中抽象出来。