EDIT 7/1/15:
मैंने इस उत्तर को बहुत पहले लिखा था और थोड़ी देर के लिए कोणीय के साथ बहुत कुछ नहीं रख रहा था, लेकिन ऐसा लगता है कि यह उत्तर अभी भी अपेक्षाकृत लोकप्रिय है, इसलिए मैं इस बिंदु पर बात करना चाहता था कि @nicolas नीचे अच्छे हैं। एक के लिए, $ rootScope को इंजेक्ट करना और वहां सहायकों को संलग्न करना आपको प्रत्येक नियंत्रक के लिए उन्हें जोड़ने से रखेगा। इसके अलावा - मैं मानता हूं कि अगर आप जो जोड़ रहे हैं, उसे कोणीय सेवाओं या फ़िल्टर के रूप में सोचा जाना चाहिए, तो उन्हें उस तरीके से कोड में अपनाया जाना चाहिए।
इसके अलावा, वर्तमान संस्करण 1.4.2 के रूप में, कोणीय "प्रदाता" एपीआई को उजागर करता है, जिसे कॉन्फ़िगर ब्लॉकों में इंजेक्ट करने की अनुमति है। अधिक के लिए ये संसाधन देखें:
https://docs.angularjs.org/guide/module#module-loading-dependencies
मॉड्यूल.कॉन्फिग के अंदर मूल्य का एंगुलरजेएस निर्भरता इंजेक्शन
मुझे नहीं लगता कि मैं नीचे दिए गए वास्तविक कोड ब्लॉक को अपडेट करने जा रहा हूं, क्योंकि मैं वास्तव में इन दिनों सक्रिय रूप से एंगुलर का उपयोग नहीं कर रहा हूं और मैं वास्तव में आरामदायक महसूस किए बिना एक नए उत्तर को खतरे में नहीं डालना चाहता हूं कि यह वास्तव में नए सर्वश्रेष्ठ के अनुरूप है। कार्य करती है। अगर किसी और को यह लगता है, हर तरह से इसके लिए जाना।
EDIT 2/3/14:
इस बारे में सोचने और कुछ अन्य उत्तरों को पढ़ने के बाद, मुझे वास्तव में लगता है कि मैं @Brent Washburne और @Amogh Talpallikar द्वारा लाई गई विधि की भिन्नता को पसंद करता हूं। खासकर यदि आप उपयोगिताओं की तलाश कर रहे हैं जैसे कि NotString () या समान। यहां स्पष्ट लाभों में से एक यह है कि आप उन्हें अपने कोणीय कोड के बाहर फिर से उपयोग कर सकते हैं और आप उन्हें अपने कॉन्फ़िगरेशन फ़ंक्शन (जो आप सेवाओं के साथ नहीं कर सकते हैं) के अंदर उपयोग कर सकते हैं।
यह कहा जा रहा है, अगर आप सेवाओं को फिर से उपयोग करने के लिए एक सामान्य तरीके की तलाश कर रहे हैं, तो मुझे जो जवाब देना चाहिए, वह पुराना है।
अब मैं क्या करूंगा:
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;
});
फिर अपने आंशिक में आप उपयोग कर सकते हैं:
<button data-ng-click="console.log(helpers.isNotString('this is a string'))">Log String Test</button>
नीचे पुराना उत्तर:
उन्हें एक सेवा के रूप में शामिल करना सबसे अच्छा हो सकता है। यदि आप उन्हें कई नियंत्रकों में फिर से उपयोग करने जा रहे हैं, तो उनके साथ एक सेवा के रूप में आपको बार-बार कोड रखने से रोकना होगा।
यदि आप अपने html आंशिक में सेवा कार्यों का उपयोग करना चाहते हैं, तो आपको उन्हें उस नियंत्रक के दायरे में जोड़ना चाहिए:
$scope.doSomething = ServiceName.functionName;
फिर अपने आंशिक में आप उपयोग कर सकते हैं:
<button data-ng-click="doSomething()">Do Something</button>
यहाँ एक तरीका है जिससे आप यह सब व्यवस्थित कर सकते हैं और बहुत अधिक परेशानी से मुक्त हो सकते हैं:
अपने कंट्रोलर, सर्विस और राउटिंग कोड / कॉन्फिगरेशन को तीन फाइलों में अलग करें: कंट्रोलर.जेएस, सर्विसेस.जेएस और एप्स। शीर्ष परत मॉड्यूल "ऐप" है, जिसमें निर्भरता के रूप में app.controllers और app.services है। फिर app.controllers और app.services को अपनी फाइलों में मॉड्यूल के रूप में घोषित किया जा सकता है। यह संगठनात्मक संरचना केवल कोणीय बीज से ली गई है :
app.js:
angular.module('app', ['app.controllers', 'app.services']).
config(['$routeProvider', function($routeProvider) {
// Routing stuff here...
}]);
services.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;
});
फिर अपने आंशिक में आप उपयोग कर सकते हैं:
<button data-ng-click="genericServices.doSomething()">Do Something</button>
<button data-ng-click="genericServices.doSomethingElse()">Do Something Else</button>
इस तरह आप प्रत्येक कंट्रोलर में केवल एक लाइन का कोड जोड़ते हैं और उस दायरे तक पहुँच पाने के लिए किसी भी प्रकार के कार्यों को करने में सक्षम होते हैं।