Comments 15
Я вам больше скажу — есть js минификаторы, которые и без повторений все нормально понимают.
Например тот, что в yeoman есть — пакует как надо.
Он не работает с контроллерами директив, попапов и еще в куче других ситуаций
Спасибо за то, что познакомил с этим модулем. Мне действительно этого не хватало.
Буду всегда благодарен за такие статьи-обзоры из мира AngularJS, к сожалению, сам не могу следить за темой.
На TypeScript я делаю так:
interface ITestScope extends ng.IScope{
}

class TestCtrl{

  field1 : number;

  static $inject = ["$scope", "$someService"];

  constructor(private $ : ITestScope, private $someService){
    // по сути $scope используется только для событий и watch (еще apply)
    // данные и методы используются из инстанса контроллера
    this.field1 = 1;
   }

  someMethod(){
    this.field1 += 1;
  }
}

app.controller("TestCtrl", TestCtrl);


В шаблоне можно определить через синтаксис as:

<div ng-controller="TestCtrl as ctrl">
  {{ctrl.field1}}
  <button ng-click="ctrl.someMethod()"></button>
</div>


в системе роутов тоже (controllerAs)

Сервисы можно регистрировать точно также. Вот для дирeктив я не смог придумать изящного решения :(
Я использую as-синтаксис и для coffeescript такой сахар:

class ApplicationController
  @inject = (dependencies) ->
    @$inject = dependencies

  @register = (module, controllerName) ->
    module.controller(controllerName, @)

  constructor: ->
    _.each @constructor.$inject, (depName, depIndex) =>
      @[depName] = arguments[depIndex]


И контроллер выглядит так:
class FooController extends ApplicationController

  @inject [
    "$scope"
  ]
  
  @register(app, "FooController")

  constructor: ->
    super
 
  dummy:  ->


В результате все зависимости доступны через this.
Поднимите руки те, кто использует библиотеку классов или «надъязык» с классами, и еще не написал себе аналогичный базовый класс контроллера :)
Лично мне пару проектов назад бы то, что я выше описал, сильно бы помогло. Не пришлось бы городить огород с $scope._, в который пихал все
При хорошей архитектуре контроллеры легкие даже в очень большом приложении. А использовать кучу раз $watch в контроллере это, вообще, что-то из ряда вон выходящее. $watch — очень редкая операция!
$watch в контроллере вообще быть не должно, за очень редкими исключениями. В директиве — да.
попробовал эту библиотеку, код котроллеров стал вы глядеть немного красивей
однако приходится часто писать
Зачем? function() {… }.bind(this). Если вдруг зачем-то нужен ie8, можно использовать polyfill.
Only those users with full accounts are able to leave comments. Log in, please.