Я использую var и $scope.varname, и оба работают отлично в AngularJS. Мне было интересно, была ли разница между этими двумя функционально, и какова была лучшая практика, в которой можно использовать?
$ scope vs var в AngularJS
Ответ 1
Да! $scope
переменные связываются с представлением, где var
не является и является локальным для функции, которую она объявила в!
var x = 3;
$scope.y = 3;
{{x}} - undefined
{{y}} - 3
Ответ 2
1 - $scope - это клей между вашим контроллером и вашим представлением/моделью, когда вы определяете переменную/функцию для $-области контроллера, весь ваш вид, который этот контроллер контролирует это!, может видеть эту переменную/функцию. Если чистая переменная работает только в этом контроллере, даже не вид этого контроллера!
2- Каждая вещь, которая была определена в области $scope, manupulatable извне контроллера, в Директивах, Сервисы, ваш html view..., а чистая переменная НЕ;
Ответ 3
Технические последствия использования var
и $scope
были описаны @tymeJV и другими. Я думаю, следующий логический вопрос: когда я могу использовать?
TL; DR - если вы не используете переменную в представлении (например, {{myVar}}
), используйте var
.
Причина в два раза:
-
Инкапсуляция - скрыть состояние, которое не является необходимым для представления. Это предотвратит непреднамеренные модификации переменной.
-
Производительность (исключить дополнительные циклы дайджестов) - Angular выполняет проверку "грязного состояния" на переменных. Изменение переменной, которая не используется в представлении, может привести к излишним циклам переваривания. В приложении с парой
ng-repeat
и множеством часов это может иметь огромное влияние.
Ответ 4
Проще говоря - все переменные, которые вы определяете в области $scope, например. в вашем контроллере, доступны в вашей разметке html. в случае, если вам нужна переменная только внутри ваших js-функций, вы можете объявить ее с помощью var, они доступны только локально. То же самое с функциями.
Ответ 5
$scope привязывает значение к представлению, а var - это локальная переменная для приложения.