- controllerAs View Синтаксис: Используйте controllerAs синтаксис над классическим контроллером с синтаксисом $ scope.
Почему: Контроллеры построены, «новы» и обеспечивают один новый экземпляр, а синтаксис controllerAs ближе к синтаксису конструктора JavaScript, чем классический синтаксис $ scope.
Почему ?: Он способствует использованию привязки к «пунктируемому» объекту в представлении (например, customer.name вместо имени), который является более контекстуальным, более легким для чтения и позволяет избежать любых проблем со ссылками, которые могут возникнуть без «расставить».
Почему ?: Помогает избежать использования $ parent calls в представлениях с вложенными контроллерами.
<!-- avoid -->
<div ng-controller="Customer">
{{ name }}
</div>
<!-- recommended -->
<div ng-controller="Customer as customer">
{{ customer.name }}
</div>
- controllerAs Controller Синтаксис: Используйте синтаксис controllerAs над классическим контроллером с синтаксисом $ Scope.
Синтаксис controllerAs использует эти внутренние контроллеры, которые получают связанные с $ рамки
Почему ?: controllerAs является синтаксический более $ области. Вы все равно можете привязываться к методам просмотра и доступа к методам просмотра.
Почему ?: Помогает избежать соблазна использовать методы $ scope внутри контроллера, когда в противном случае лучше избежать их или переместить на завод. Рассмотрите возможность использования $ scope на заводе, или если в контроллере, когда это необходимо. Например, при публикации и подписке на события с использованием $ emit, $ broadcast или $ on следует переместить их на завод и вызвать из контроллера.
/* avoid */
function Customer ($scope) {
$scope.name = {};
$scope.sendMessage = function() { };
}
/* recommended - but see next section */
function Customer() {
this.name = {};
this.sendMessage = function() { };
}
- controllerAs с Виджей Малья: при использовании синтаксиса controllerAs Используйте переменную захвата для этого. Выберите имя постоянной переменной, например vm, что означает ViewModel.
Почему ?: Это ключевое слово контекстуально и при использовании внутри функции внутри контроллера может изменить свой контекст. Захват контекста этого позволяет избежать этой проблемы.
/* avoid */
function Customer() {
this.name = {};
this.sendMessage = function() { };
}
/* recommended */
function Customer() {
var vm = this;
vm.name = {};
vm.sendMessage = function() { };
}
Примечание: вы можете избежать любых предупреждений jshint, разместив комментарий ниже строки кода. /* jshint validthis: true / var vm = this; Примечание: при создании часов в контроллере с использованием контроллера, вы можете смотреть vm., используя следующий синтаксис. (Создать часы с осторожностью, так как они добавляют больше нагрузки на цикл дайджеста.)
$scope.$watch('vm.title', function(current, original) {
$log.info('vm.title was %s', original);
$log.info('vm.title is now %s', current);
});
https://github.com/johnpapa/angularjs-styleguide#controllers
Возможно, вам стоит прочитать, как Angular работает с '$ scope'. Это рекомендуемый способ привязки к пользовательскому интерфейсу. Во-первых, без '$ scope' вы не будете' $ смотреть ', и поэтому я не ожидал, что работа с двумя способами. Кроме того, ваши отрывки, похоже, работают для меня. –
Пожалуйста, посмотрите это сообщение и видео https://thinkster.io/egghead/experimental-controller-as-syntax/ – Chandermani
Код работает. –