EDIT 7/1/15:
Saya menulis jawaban ini cukup lama dan belum banyak menjaga sudut dengan sudut pandang untuk sementara waktu, tetapi sepertinya jawaban ini masih relatif populer, jadi saya ingin menunjukkan bahwa beberapa titik @nicolas membuat di bawah ini bagus. Pertama, menyuntikkan $ rootScope dan melampirkan pembantu di sana akan membuat Anda tidak perlu menambahkannya untuk setiap pengontrol. Juga - Saya setuju bahwa jika apa yang Anda tambahkan harus dianggap sebagai layanan ATAU filter, mereka harus diadopsi ke dalam kode dengan cara itu.
Juga, pada versi 1.4.2 saat ini, Angular mengekspos API "Penyedia", yang diizinkan untuk disuntikkan ke blok konfigurasi. Lihat sumber daya ini untuk lebih banyak:
https://docs.angularjs.org/guide/module#module-loading-dependencies
Injeksi ketergantungan nilai AngularJS di dalam module.config
Saya tidak berpikir saya akan memperbarui blok kode aktual di bawah ini, karena saya tidak benar-benar aktif menggunakan Angular hari ini dan saya tidak benar-benar ingin membahayakan jawaban baru tanpa merasa nyaman bahwa itu benar-benar sesuai dengan yang terbaik baru praktik. Jika orang lain merasa sanggup melakukannya, tentu saja lakukanlah.
EDIT 2/3/14:
Setelah memikirkan hal ini dan membaca beberapa jawaban lain, saya sebenarnya berpikir saya lebih suka variasi metode yang dibawakan oleh @Brent Washburne dan @Amogh Talpallikar. Terutama jika Anda mencari utilitas seperti isNotString () atau serupa. Salah satu keuntungan yang jelas di sini adalah Anda dapat menggunakannya kembali di luar kode sudut Anda dan Anda dapat menggunakannya di dalam fungsi konfigurasi Anda (yang tidak dapat Anda lakukan dengan layanan).
Yang sedang berkata, jika Anda mencari cara umum untuk menggunakan kembali apa yang seharusnya menjadi layanan, jawaban lama saya pikir masih bagus.
Apa yang akan saya lakukan sekarang adalah:
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) {
// Routing stuff here...
}]);
controller.js:
angular.module('app.controllers', []).
controller('firstCtrl', ['$scope', function($scope) {
$scope.helpers = MyNamespace.helpers;
});
Kemudian di parsial Anda, Anda dapat menggunakan:
<button data-ng-click="console.log(helpers.isNotString('this is a string'))">Log String Test</button>
Jawaban lama di bawah:
Mungkin yang terbaik untuk memasukkan mereka sebagai layanan. Jika Anda akan menggunakannya kembali di banyak pengontrol, termasuk mereka sebagai layanan akan membuat Anda tidak perlu mengulangi kode.
Jika Anda ingin menggunakan fungsi layanan di sebagian html Anda, maka Anda harus menambahkannya ke lingkup pengontrol itu:
$scope.doSomething = ServiceName.functionName;
Kemudian di parsial Anda, Anda dapat menggunakan:
<button data-ng-click="doSomething()">Do Something</button>
Inilah cara Anda dapat menjaga ini semua terorganisir dan bebas dari kerumitan terlalu banyak:
Pisahkan pengontrol, layanan, dan kode perutean / konfigurasi menjadi tiga file: controllers.js, services.js, dan app.js. Modul lapisan atas adalah "app", yang memiliki app.controllers dan app.services sebagai dependensi. Kemudian app.controllers dan app.services dapat dideklarasikan sebagai modul dalam file mereka sendiri. Struktur organisasi ini diambil dari Benih Angular :
app.js:
angular.module('app', ['app.controllers', 'app.services']).
config(['$routeProvider', function($routeProvider) {
// Routing stuff here...
}]);
layanan.js:
/* Generic Services */
angular.module('app.services', [])
.factory("genericServices", function() {
return {
doSomething: function() {
//Do something here
},
doSomethingElse: function() {
//Do something else here
}
});
controller.js:
angular.module('app.controllers', []).
controller('firstCtrl', ['$scope', 'genericServices', function($scope, genericServices) {
$scope.genericServices = genericServices;
});
Kemudian di parsial Anda, Anda dapat menggunakan:
<button data-ng-click="genericServices.doSomething()">Do Something</button>
<button data-ng-click="genericServices.doSomethingElse()">Do Something Else</button>
Dengan begitu Anda hanya menambahkan satu baris kode ke setiap pengontrol dan dapat mengakses fungsi layanan mana pun di mana ruang lingkup itu dapat diakses.