如果我在服务中处理它(我将数据分配给一个属性),那么当数据最终到来时,控制器不会得到值。如果我用承诺本身来回应,那没关系,我可以从控制器获得数据。但是,如果有更多的控制器依赖于同一服务,并且我希望所有控制器都能获得最新数据,会发生什么?
是否有从服务到控制器的通知机制?
我想这确实是一个偏好,因为你可以做任何一种。我更喜欢返回承诺并在控制器中处理它,原因如下:
- 如果您的呼叫失败,请进行正确的错误处理。根据您所在的控制器,您可以用不同的方式处理失败的呼叫
- 一致性。你知道,每次你使用这项服务,你都会得到回报。这也可以扩展到您的整个项目
为了解决你的第二个问题,我认为你有几个选择。首先,您可以管理您的作用域层次结构,并使用广播或发射来告知其他子控制器有关您的数据。你可以在你的控制器中做这样的事情:
myService.getData().success(function (data) {
// do something with results
$scope.$broadcast('GOT_DATA', data);
});
然后在子/父控制器中:
$scope.$on('GOT_DATA', function(event, data) {
// use data in another controller
});
您还可以考虑在服务中缓存结果,同时还可以返回您的承诺。然后,每当另一个控制器调用该函数时,它们都会获得与上一次调用相同的数据。这意味着你可以将你的服务注入到你想要的任何控制器中,然后每个控制器都可以在不同的时间获得数据,但它将与原始请求相同。