在Angular documentation for services中,我遇到了这段代码:
angular.
module('myServiceModule', []).
controller('MyController', ['$scope','notify', function ($scope, notify) {
$scope.callNotify = function(msg) {
notify(msg);
};
}]).
factory('notify', ['$window', function(win) {
var msgs = [];
return function(msg) {
msgs.push(msg);
if (msgs.length == 3) {
win.alert(msgs.join("\n"));
msgs = [];
}
};
}]);
我的问题是,为什么不这样做更简单,只需在$scope.callNotify
函数中定义函数notify?
如果服务只是其他地方定义的功能,那么实现同样的事情有哪些更简单的方法?
答案 0 :(得分:1)
考虑在另一个控制器中重用该代码;你将无法做到。
但是如果你将它放在一个服务中,它可以被注入,然后在任何地方重复使用。
答案 1 :(得分:0)
主要原因是控制器中不应存在任何业务逻辑。它应该只是你的范围和模型之间的粘合剂。 另一个原因是代码可重用性,单一责任原则,更好的可测试性,列表是无穷无尽的。
总体而言,将您的应用程序分解为可以自行测试的较小部分是一种很好的编程习惯,从而提高了应用程序的整体可维护性和可测试性。