Angularjs: $scope vs scope

В Angularjs существует ли конкретная причина использовать $scope в контроллерах и scope (без "$") в функции ссылок директив? Это просто соглашение или что-то еще?

Ответ 1

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

В случае директивы инъекция основана на позиции, поэтому вы можете назвать свою переменную a или b или любую вещь. Порядковый порядок для функции связи

(scope, iElement, iAttrs, controller)

поэтому первый элемент всегда является объектом scope.

Ответ 3

Модули factory, такие как контроллер, директива, factory, фильтр, сервис, анимация, конфигурация и запуск получают аргументы через инъекцию зависимостей (DI). В случае DI вы добавляете объект области с помощью префикса доллара, т.е. $scope. Причиной является введенные аргументы, которые должны совпадать с именами объектов, пригодных для инъекций, за которыми следует префикс доллара ($).

Например, вы можете ввести объекты области и элемента в контроллер, как показано ниже:

module.controller('MyController', function ($scope, $element) { // injected arguments });

Когда методы, подобные функции указателя ссылок, не получают аргументы через инъекцию зависимости, вы просто передаете объект области без использования префикса доллара, т.е. область. Причина в том, что передающие аргументы принимаются вызывающим абонентом.

module.directive('myDirective', function () // injected arguments here 
{ 
    return { 
         // linker function does not use dependency injection 
         link: function (scope, el, attrs) { 
            // the calling function will passes the three arguments to the linker: scope, element and attributes, in the same order 
         } 
    }; 
});

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

Ответ 4

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

Ответ 5

$ в "$scope" указывает, что значение области вводится в текущий контекст.

$scope - это услуга, предоставляемая $scopeProvider. Вы можете ввести его в контроллеры, директивы или другие службы, используя встроенный инжектор зависимостей Angular:

module.controller(function($scope) {...})

который является сокращением для

module.controller(['$scope', function($scope) {...}])

Однако scope может быть любым, это имя параметра функции, может быть foo или a12342saa.

function link( scope, element, attributes ) {
    //  Only scope 
}

Ответ 6

"$" в "$ scope" указывает, что значение области вводится в текущий контекст. Но не все ссылки на область охвата основаны на инъекции зависимостей.