AngularJS и параметры контроллеров
Суббота, 30 марта 2013

Те люди, которые работают с AngularJS, знают про директиву ngController. В нее передается функция, описывающая поведение блока с директивой. И тут начинается магия! Если наша функция выглядит так:

SomeController = function ($scope) {...};

то она будет вызвана с одним параметром — scope, связанным с контроллером. А если, она выглядит, например, так:

SomeController = function ($http, $location, $scope) {...};

то передаваемых параметров станет внезапно три: два системных сервиса ($http и $location) и тот же самый scope.

Так как же фреймворк определяет, какие параметры нужны для вызова контроллера? Эта магия называется Function.toString(). Метод toString() у функции возвращает ее текст, а дальше дело техники: /^function\s*[^\(]*\(\s*([^\)]*)\)/m. Получили имена параметров, разобрали, подставили. Вот такой нетривиальный подход.

Детали можно посмотреть в исходниках.

← AchtundzwanzigDüsseldorf →

Хочется что-то добавить или сказать? Я всегда рад обсудить. Пишите на me@dikmax.name.