Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 将控制器的引用传递给服务并直接从服务修改视图中的数据是否是一种好的做法?_Angularjs - Fatal编程技术网

Angularjs 将控制器的引用传递给服务并直接从服务修改视图中的数据是否是一种好的做法?

Angularjs 将控制器的引用传递给服务并直接从服务修改视图中的数据是否是一种好的做法?,angularjs,Angularjs,让我举个例子来解释一下 控制器: 现在employeeName和employeeAge变量被绑定到视图HTML 服务: 现在,我们可以使用此服务更改视图中的name和age值 它正在成功地发生。但这是一种好的做法吗?它不会破坏MVC模式吗?在MVC层之间保持松散耦合总是一个好主意。在给定的代码中,如果控制器被更改,那么服务也将需要更改,从而使每次更改都非常复杂。看起来很奇怪。。。一个更简洁的解决方案是使用angular.extend/$.extend/\ux.extend使用从服务返回的数据来扩

让我举个例子来解释一下

控制器:

现在employeeName和employeeAge变量被绑定到视图HTML

服务:

现在,我们可以使用此服务更改视图中的name和age值


它正在成功地发生。但这是一种好的做法吗?它不会破坏MVC模式吗?

在MVC层之间保持松散耦合总是一个好主意。在给定的代码中,如果控制器被更改,那么服务也将需要更改,从而使每次更改都非常复杂。

看起来很奇怪。。。一个更简洁的解决方案是使用angular.extend/$.extend/\ux.extend使用从服务返回的数据来扩充目标对象控制器。imo错误做法就像将$scope传递给服务,这样做有什么好处?控制器的作用是什么?该服务应该设计为跨控制器甚至应用程序使用-您所做的只是创建了一个不必要的间接级别。该服务应该像服务器端的静态功能一样工作,获取输入并给出输出。。。您通过的应该是所需的最小参数,以便易于测试
app.controller('myController', function(){

  var refCtrl = this;

  refCtrl.employeeName = 'Bill';
  refCtrl.employeeAge  = 25;

  myService.changeNameAndAge(refCtrl);

});
app.factory('myService',function(){

   return {

      changeAgeAndName : function(ref) {

          if(some_business_logic_condition_check) {
             ref.name = 'Harry';
             ref.age = 30;
          }
      }
  };
});