続きをかきました。
よくわからなかったので以下のようにしましたが、まっとうな方法には思えないので正しいやりかたをおしえていただきたく申し上げます……
- factory で空のオブジェクトをかえしとく
- view に紐付けた controller で factory で作ったオブジェクトを初期化する
- 作った Service を依存に加えて使う
一応、controller 間は直接依存しない (Service を mock にさしかえれば動く) のでユニットテストは書けると思うけど、よくわかりません……
myApp.factory('DialogService', function () { return { } });
myApp.controller('DialogControl', function ($scope, $q, DigalogService) {
DialogService.open = function (title, message) {
$scope.deferred = $q.defer();
$scope.show = true;
return $scope.deferred.promise;
};
$scope.close = function () {
$scope.show = false;
$scope.deferred = null;
};
$scope.ok = function () {
$scope.deferred.resolve(true);
};
});
// User
myApp.controller('FooController', function ($scope, DialogService) {
DialogService.open('foo', 'bar').then(function () {
...
});
});
そもそも "View independent business logic: Services" と書いてあるので、定義からして Service はビューを持ってはいけないようです。
じゃあビューを伴う Service 的なものはどうやって書くんですか