Ответ 1
Я написал несколько ответов на этот вопрос в прошлом, и они все сводятся к одному и тому же. В Angular вы используете $scope
, даже если вы прямо не ссылаетесь на него.
Синтаксис ControllerAs позволяет Angular помочь вам создавать более эффективные отказоустойчивые контроллеры. За кулисами, когда вы используете ng-controller="theController as ctrl"
, Angular создает theController
как свойство в $scope
и назначает его как ctrl
. Теперь у вас есть свойство объекта, которое вы ссылаетесь на область видимости, и автоматически защищены от проблем наследования прототипов.
С точки зрения производительности, поскольку вы все еще используете $scope
, разница в производительности должна быть незначительной. Однако, поскольку ваш контроллер теперь не назначает переменные непосредственно $scope
на свой собственный, ему не нужно вводить $scope
. Кроме того, контроллер может быть гораздо легче протестирован изолированно, так как теперь это просто простая функция JavaScript.
С точки зрения перспективного мышления, теперь хорошо известно, что Angular 2.0 не будет иметь $scope
, но вместо этого будет использовать функции ECMAScript 6. В любых предпросмотрах, выпущенных командой Angular, показывающей миграции, они сначала начните с рефакторинга контроллера, чтобы устранить $scope
. Если ваш код разработан без использования контроллеров на основе $scope
, ваш первый шаг в миграции уже завершен.
С точки зрения дизайнера синтаксис ControllerAs значительно упрощает работу с объектами. Имея customerCtrl.Address
и storeCtrl.Address
, гораздо проще идентифицировать, что у вас есть адрес, назначенный несколькими разными контроллерами для разных целей, чем если бы оба использовали $scope.Address
. Наличие двух разных HTML-элементов на странице, которые оба привязаны к {{Address}}
, и знание того, какой из них является только контроллером, содержащий элемент, является серьезной проблемой для устранения неполадок.
В конечном счете, если вы не пытаетесь развернуть 10-минутную демонстрацию, вам действительно нужно использовать ControllerAs для любой серьезной работы Angular.