AngularJS и его использование переменных доллара

Кто-нибудь знает, могут ли рассуждения, связанные с использованием долларовых методов и переменных в angularJS, инструктировать angularJS, чтобы не проверять эти значения, когда происходит переваривание? Итак, если angular встречается $scope.$value и $scope.value, то он избегает проверки первого, поскольку он имеет префикс символа доллара в его имени переменной?

Ответ 1

Есть несколько раз Угловая игнорирует переменные с префиксом доллара:

  1. В комментарии Шумли ниже, где json-фильтры не будут выводить их
  2. При использовании директивы {{ }} угловые не будут отображать вложенные переменные $. Например, это отображает только visible свойство.

    <div ng-init="n = { visible: 'foo', $ignore: 'bar' };">{{ n }}</div>
    
  3. Кроме того, при добавлении явного наблюдателя в объект области видимости изменения свойств со знаками, знаками которых являются знак доллара, не будут вызывать наблюдателя. Смотрите эту обновленную скрипку.

  4. angular.equals() игнорирует ключи с префиксом $.

Ответ 2

Это просто соглашение об именах из нижеприведенного фрагмента http://docs.angularjs.org/tutorial/step_05

'$' Соглашение о присвоении имен префиксов
Вы можете создавать свои собственные услуги и факт, мы сделаем именно это на шаге 11. Как соглашение об именах, angular встроенные службы, методы Scope и несколько других angularУ API есть префикс $$ перед именем. Не используйте префикс '$' при наименовании ваших услуг и моделей, чтобы избежать возможных именования коллизий.

http://docs.angularjs.org/guide/concepts#angular_namespace

Angular Пространство имен
Чтобы предотвратить случайное совпадение имен, angularпрефиксы имен объектов, которые потенциально могут столкнуться с $. Пожалуйста, не используйте префикс $в вашем коде, поскольку это может случайно сталкиваются с кодом angular.

Ответ 3

Префикс $ обозначает переменную, параметр, свойство или метод, который принадлежит ядру Angular.

Свойства объектов, которые возникают внутри фреймворка, но не являются частью API, могут начинаться с $ - или даже $$ - для обозначения метода или свойства private. Точно так же префикс _ часто используется в других библиотеках.

Это не влияет на то, как код интерпретируется средой выполнения, хотя сама структура может придать ей особое значение. В принципе, это соглашение об именах, в котором говорится: "Вы не должны возиться с этим".

Ответ 4

Не совсем уверен, но я верю, что внутренние элементы AngularJS полагаются на управление этими переменными $-prefixed во время дайджест. Проверка этих переменных будет означать, что дайджест никогда не стабилизируется, так как они могут постоянно меняться в течение каждого цикла дайджеста.

Не цитируйте меня, хотя.:)

Ответ 5

Я всегда думал, что $ выглядит как "S" для службы.

Ответ 6

Знаки доллара ($) также препятствуют повторению итерации (или интерпретации) элементов в определенных директивах. Например, свойства, начинающиеся с $, не используются в ng-repeat из-за аргумента if в цикле for:

if(collection.hasOwnProperty(key) && key.charAt(0) != '$')

Кто-то сделал вопрос о теме здесь, на странице угловых github


В методе shallowCopy свойства, начинающиеся с $$, пропускаются из-за if, когда выполняется итерация свойств:

if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {

Ответ 8

@MarcoS предоставил ссылку https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope, которая объясняет разницу между $scope и scope. Я нашел это полезным, добавив информацию в другие ответы.

В директиве angular есть ссылка и контроллер. Ссылка представляет собой стандартную функцию с фиксированным набором параметров: область действия, элемент, объект атрибутов.

Аргументы контроллера управляются инжектором angular и не зависят от порядка. Инжектор решает, какие объекты пройти, ища параметры, начинающиеся с $.

Автор https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope лучше справляется с этим.

Ответ 9

Там огромная разница, не в переменных, а в параметрах, которые получает контроллер. Параметр области полностью отличается от объекта $scope.

Для получения дополнительной информации ознакомьтесь с этим полезным сообщением: http://www.thinkster.io/angularjs/aw9kWmdnik/angularjs-scope-vs-scope