اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
دو دقیقه
همان طور که در پستهای قبلی
ذکر شده بود در angular تزریق وابستگی به صورت پیش فرض وجود دارد. کافیست
نام سرویس مورد نظر با نامهای پیش فرض تعبیه شده در angular یا با نام
سرویسهای ساخته شده توسط خودتان مطابقت داشته باشد. به عنوان مثال
برای تزریق سرویس scope$ در توابع سازنده کنترلر کافیست یک پارامتر به
همین نام را به عنوان آرگومان در این توابع در نظر بگیرید. همچنین برای
استفاده از سرویس http$ باید یک پارامتر دیگر به همین نام در این توابع در
نظر داشته باشید و همچنین برای location$. در مورد سرویسهای ساخته شده
توسط خودتان نیز باید همین قانون را پیاده کنید. در این پست قصد دارم از
injector تعبیه شده در angular برای تغییر رفتار فریم ورک در هنگام شناسایی
پارامترهای توابع استفاده کنم.
ابتدا مثال زیر را به روشهای قبلی پیاده سازی میکنیم:
ابتدا مثال زیر را به روشهای قبلی پیاده سازی میکنیم:
var app = angular.module('myApp', []); app.factory('bookService', function () { var books = [ { name: 'A' }, { name: 'B' }, { name: 'C' } ]; return books; }); app.controller('bookCtrl', function ($scope, bookService) { $scope.books = bookService; })
<script type="text/javascript" src="~/scripts/Modules/module5.js"></script> <div ng-app="myApp"> <div ng-controller="bookCtrl"> <table> <tr ng-repeat="book in books"> <td> {{book.name}} </td> </tr> </table> </div> </div>
var bookCtrl = function (sc,bs) { sc.books = bs; };
app.controller('bookCtrl',bookCtrl);
bookCtrl.$inject = ['$scope','bookService'];
var app = angular.module('myApp', []); app.factory('bookService', function () { var books = [ { name: 'A' }, { name: 'B' }, { name: 'C' } ]; return books; }); var bookCtrl = function (sc,bs) { sc.books = bs; }; bookCtrl.$inject = ['$scope','bookService']; app.controller('bookCtrl',bookCtrl);
از این پس در هنگام فراخوانی تابع کنترلر bookCtrl سرویسهای scope$ و bookService به ترتیب به عنوان آرگومانهای اول و دوم در اختیار کنترلر قرار میگیرند. میتوان به جای فراخوانی مستقیم inject$، تزریق وابستگیها را در هنگام تعریف توابع سازنده به صورت زیر نیز فراهم ساخت:
app.controller('bookCtrl', ['$scope', 'bookService', function (sc, bs) { sc.books = bs; }])