2015-07-15 3 views
6

Отличие между this vs $scope четко ответил на этот вопрос. Один из проектов, над которыми я работаю, Наш старший парень продвигает this за $scope, утверждая, что он обеспечивает лучшую производительность.

Я попытался найти доказательства того же, но официальные угловые документы имеют очень ограниченную информацию по этому вопросу.

Может ли один пожалуйста, объясните

  1. ли this обеспечить лучшую производительность по сравнению с $scope (при условии, что я не использую $watch и т.д.)
  2. Если да по какой именно причине? является ли улучшение производительности значительным для изменения существующего приложения с использованием $scope до this?
+0

Возможный дубликат [this vs $ scope в контроллерах AngularJS] (http://stackoverflow.com/questions/11605917/this-vs-scope-in-angularjs-controllers) –

+0

, пожалуйста, внимательно прочитайте вопрос, не просите уважение Я прошу кое-что еще – Yogesh

+4

: https://github.com/johnpapa/angular-styleguide –

ответ

5

На производительность AngularJS влияет количество привязок, которое использует загружаемое в настоящее время представление (страница), и часы, которые вы настраиваете вручную, используя $watch. Все это связывание работает только с свойствами, объявленными в $ scope.

Это означает, что если вы не являетесь обязательным объектом для просмотра или не просмотра его, лучше не объявлять его в области $ scope (также называемой предотвращением загрязнения области).

this, как описано в сообщении SO this, имеет другой контекст при вызове Angular (например, в случае ng-click) и при создании контроллера.

Так что все, что вы заявляете на this (при обращении к контроллеру), технически не может быть связано с представлением, поскольку оно не объявлено в области.

Но Угловой придумал синтаксис controller as, где он позволяет нам использовать свойства и методы над объектом контроллера. В таких сценариях свойства, объявленные над контроллером, связаны в представлении с использованием синтаксиса ctrl.prop. Внутренне Угловой делает что-то вроде этого, когда вы делаете ng-controller='HomeController as ctrl'

$scope.ctrl=this

Который в основном означает, Угловой прикрепляют полный объект контроллера к $scope и, следовательно, связываясь с работой свойства контроллера.

Так что единственное, что имеет значение с точки зрения производительности, - это отслеживание количества привязок.

+0

, так что вкратце нет выгоды от производительности 'this' over' $ scope' !? – Yogesh

+0

Как упомянуто выше, производительность определяется числом привязки в поле зрения, а не непосредственно «этим» или «$ scope». Если вы определяете ряд свойств в области и никогда не используете их, это не влияет на производительность. – Chandermani

+2

В этом случае лучше использовать '$ scope' вместо' this'? Если я правильно понимаю, если синтаксис 'controller as' раскрывает все' this' в '$ scope', разве это не приводит к загрязнению' $ scope', что метод, в котором мы только объявляем '$ scope' в контроллере, когда нам это нужно? – Neel

0

Angularjs использует оба из них взаимозаменяемо, поэтому нет никакой разницы в отношении производительности.

Но использование this должно быть более низким (даже не ниже), чем $scope, так как this создает новый экземпляр объекта.

Но на самом деле, используя this более элегантный способ, как: (., Например, для items.name, чем имя)

  • Более контекстная
  • Может использоваться вложенную контроллер легко и без каких-либо конфликтов.
+0

Это неверно, – Chandermani

0

Предполагая, что у вас нет таких часов не должно создать барьер производительности.

На мой взгляд, вы должны не есть какие-либо «методы» этого свойства \ свойства на вашем controller.
A controller - лучший друг зрения и должен иметь только соответствующие свойства.
Соответствующее свойство является свойством, которое вы собираетесь связывать внутри своего вида (свойства, функции и т. Д.).

Все ваши «эти» свойства, вероятно, должны быть на service.