Javascript Angularjs-在控制器之间共享数据

Javascript Angularjs-在控制器之间共享数据,javascript,angularjs,Javascript,Angularjs,有两个控制器。一个控制器将数据写入一个对象&另一个控制器需要读取它。我可以在app.js文件中有一个全局变量,可以在两个控制器中使用。我很困惑,为什么需要使用服务在控制器之间共享数据? app.js: var msg = 'message init' app.controller('readController', function($scope){ $scope.msg = msg console.log(msg) }); app.controller('writeCo

有两个控制器。一个控制器将数据写入一个对象&另一个控制器需要读取它。我可以在app.js文件中有一个全局变量,可以在两个控制器中使用。我很困惑,为什么需要使用服务在控制器之间共享数据? app.js:

var msg = 'message init'
app.controller('readController', function($scope){
      $scope.msg = msg
      console.log(msg)
});
app.controller('writeController', function(){
      msg = 'message is written'
});

写入控制器中所做的更改不会反映到读取控制器中吗?在这种情况下,控制台必须具有“消息已写入”。

您可以从$rootScope读取和写入数据。对于简单的数据,我认为您不需要服务。但是请记住,这可能不是一个好的设计

app.controller('readController', function($scope, $rootScope){
  $scope.myMsg = $rootScope.msg;
  console.log($scope.myMsg);
});

app.controller('writeController', function($rootScope){
  $rootScope.msg = 'message is written';
});

我不会建议编写全局变量,然后在控制器之间共享数据。
相反,您可以与更简单的服务和工厂共享数据。

这是一个有关闭包和变量范围的JavaScript问题。您可以创建子控制器并更新父控制器中的变量,但这不是首选做法。您可能会觉得使用一个服务来共享一个价值是过分的,但事实并非如此。控制器之间共享的任何数据都应在服务中。这使得它是可测试和可注入的。是的,你的代码“工作”,但它破坏了分离,使它易于实施。您放弃了自动单元测试,没有冲突的变量保护,两个控制器的执行速度都比使用DI慢,没有固有的数据更改通知,没有防止缩小错误的保护,调试更困难,还有,我需要列出更多吗?也就是说,您可以使用$scope在没有服务的情况下进行共享。