我們試圖鎖定使用服務的最佳方法,並提出了三種可能性。這是一個更大問題的小例子,但我希望它可以得到一個點。在這些例子中的服務是非常簡單的:使用/實現服務的正確方法
.service("markerService", function(){
var self = this;
self.showMarkers = false;
self.toggleMarkers = function(value){
self.showMarkers = angular.isDefined(value) ? !!value : !self.showMarkers;
};
})
而且它編譯後的DOM也很簡單:
<div ng-controller="ParentCtrl" class="ng-scope">
<div class="assetsDirective">
<div>
<div class="assetDirective">Hidden Name: 1</div>
<div class="assetDirective">Hidden Name: 2</div>
</div>
</div>
<div class="toolBarDirective">
<div>
<button>Toggle Markers</button>
</div>
</div>
</div>
我們已經想出的選項有:
- 選項A:http://jsfiddle.net/nxhn31yv/(資產和工具欄都有服務)
- 選項B:http://jsfiddle.net/oszop5j4/(資產有服務,工具欄的父服務和工具欄的更新吧)
- 選項C:http://jsfiddle.net/a7nf31d3/(所有的家長都有服務,通過它)
第一個注入服務器分爲兩個兄弟控制器,其中一個調用切換功能更新存儲在該服務中的值。
第二個選項將它注入到具有父/子關係的兩個服務中。父進程將值傳遞給一個可以更新它的子進程(比如ngmodel),而帶有注入服務的子控制器將其值傳遞給使用它的子進程。
第三種選擇是讓父母將值全部傳遞給兩個兄弟姐妹,後者又將一個兄弟傳遞給它的孩子。
其中哪些符合angulars如何實施服務的方法論?
我不知道,如果你的實際使用情況是不同的,但共享控制器和指令之間的信息,我會使用的範圍,而不是!根範圍中的showMarkers布爾值將比這裏的服務更好。 – flup 2015-02-19 08:25:50