01.07.2015 DÜZENLE:
Bu cevabı çok uzun zaman önce yazmıştım ve bir süredir açısal ile pek uymuyordum, ancak bu cevap hala nispeten popüler gibi görünüyor, bu yüzden @nicolas'ın birkaç noktasını belirtmek istedim. aşağıdaki markalar iyidir. Birincisi, $ rootScope enjekte etmek ve yardımcıları oraya eklemek, sizi her denetleyici için eklemek zorunda kalmayacaktır. Ayrıca - Eklediğiniz şeyin Angular hizmetleri VEYA filtreleri olarak düşünülmesi gerekiyorsa, bu şekilde koda uyarlanması gerektiğini kabul ediyorum.
Ayrıca, mevcut sürüm 1.4.2'den itibaren, Angular, yapılandırma bloklarına enjekte edilmesine izin verilen bir "Sağlayıcı" API'sini açığa çıkarmaktadır. Daha fazlası için şu kaynaklara bakın:
https://docs.angularjs.org/guide/module#module-loading-dependencies
Module.config içindeki değerin AngularJS bağımlılığı enjeksiyonu
Aşağıdaki gerçek kod bloklarını güncelleyeceğimi sanmıyorum, çünkü bugünlerde Angular'ı gerçekten aktif olarak kullanmıyorum ve yeni bir cevabı gerçekten en iyiye uyduğundan emin olmadan tehlikeye atmak istemiyorum uygulamalar. Bir başkası kendini iyi hissederse, elbette onun peşinden git.
2/3/14 DÜZENLE:
Bunu düşündükten ve diğer cevapların bazılarını okuduktan sonra, @Brent Washburne ve @Amogh Talpallikar'ın ortaya koyduğu yöntemin bir çeşitlemesini tercih ettiğimi düşünüyorum. Özellikle isNotString () veya benzeri yardımcı programlar arıyorsanız. Buradaki açık avantajlardan biri, bunları açısal kodunuzun dışında yeniden kullanabilmeniz ve bunları yapılandırma işlevinizin (hizmetlerle yapamayacağınız) içinde kullanabilmenizdir.
Bununla birlikte, hizmetleri düzgün bir şekilde yeniden kullanmanın genel bir yolunu arıyorsanız, eski cevabın hala iyi olduğunu düşünüyorum.
Şimdi yapacağım şey:
app.js:
var MyNamespace = MyNamespace || {};
MyNamespace.helpers = {
isNotString: function(str) {
return (typeof str !== "string");
}
};
angular.module('app', ['app.controllers', 'app.services']).
config(['$routeProvider', function($routeProvider) {
}]);
controller.js:
angular.module('app.controllers', []).
controller('firstCtrl', ['$scope', function($scope) {
$scope.helpers = MyNamespace.helpers;
});
Daha sonra kısmi olarak şunları kullanabilirsiniz:
<button data-ng-click="console.log(helpers.isNotString('this is a string'))">Log String Test</button>
Aşağıdaki eski cevap:
Bunları bir hizmet olarak dahil etmek en iyisi olabilir. Bunları birden çok denetleyicide yeniden kullanacaksanız, bir hizmet olarak da dahil olmak üzere, kodu tekrarlamak zorunda kalmayacaksınız.
Kısmi html'nizdeki hizmet işlevlerini kullanmak istiyorsanız, bunları denetleyicinin kapsamına eklemelisiniz:
$scope.doSomething = ServiceName.functionName;
Daha sonra kısmi olarak şunları kullanabilirsiniz:
<button data-ng-click="doSomething()">Do Something</button>
İşte tüm bunları organize ve çok fazla güçlükten uzak tutmanın bir yolu:
Denetleyicinizi, hizmet ve yönlendirme kodunuzu / yapılandırmanızı üç dosyaya ayırın: controllers.js, services.js ve app.js. Üst katman modülü, bağımlılık olarak app.controllers ve app.services içeren "app" dir. Ardından app.controllers ve app.services kendi dosyalarında modüller olarak bildirilebilir. Bu organizasyon yapısı sadece Angular Seed'den alınmıştır :
app.js:
angular.module('app', ['app.controllers', 'app.services']).
config(['$routeProvider', function($routeProvider) {
// Routing stuff here...
}]);
services.js:
angular.module('app.services', [])
.factory("genericServices", function() {
return {
doSomething: function() {
},
doSomethingElse: function() {
}
});
controller.js:
angular.module('app.controllers', []).
controller('firstCtrl', ['$scope', 'genericServices', function($scope, genericServices) {
$scope.genericServices = genericServices;
});
Daha sonra kısmi olarak şunları kullanabilirsiniz:
<button data-ng-click="genericServices.doSomething()">Do Something</button>
<button data-ng-click="genericServices.doSomethingElse()">Do Something Else</button>
Bu şekilde, her bir denetleyiciye yalnızca bir satır kod eklersiniz ve kapsamın erişilebilir olduğu her yerde hizmet işlevlerinden herhangi birine erişebilirsiniz.