В Angularjs существует ли конкретная причина использовать $scope
в контроллерах и scope
(без "$"
) в функции ссылок директив? Это просто соглашение или что-то еще?
Angularjs: $scope vs scope
Ответ 1
В случае, когда вы выполняете $scope
в контроллере, инжекция зависимостей вводит область действия на основе соответствия имени переменной $scope
, в этом случае с использованием scope
, поскольку имя не будет работать.
В случае директивы инъекция основана на позиции, поэтому вы можете назвать свою переменную a
или b
или любую вещь. Порядковый порядок для функции связи
(scope, iElement, iAttrs, controller)
поэтому первый элемент всегда является объектом scope.
Ответ 2
Вы также можете найти очень хороший видео ответ на этот вопрос Джона Линдквиста здесь: http://egghead.io/lessons/angularjs-scope-vs-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" указывает, что значение области вводится в текущий контекст. Но не все ссылки на область охвата основаны на инъекции зависимостей.