programing

Angularjs: $scope vs scope

telebox 2023. 4. 2. 10:18
반응형

Angularjs: $scope vs scope

Angularjs에서 다음을 사용해야 하는 특별한 이유가 있습니까?$scope컨트롤러 및scope(없음)"$"명령어 링크 기능에 포함됩니까?그냥 관례인가? 아니면 다른 것인가?

할 때$scope컨트롤러에서 종속성 주입은 변수 이름 일치를 기반으로 스코프를 주입합니다.$scope, 이 경우,scope이름이 통하지 않으니.

지시어의 경우 주입은 위치 기반이므로 변수의 이름을 지정할 수 있습니다.a또는b뭐 그런 거.링크 함수의 지시 순서는 다음과 같습니다.

(scope, iElement, iAttrs, controller)

따라서 첫 번째 요소는 항상 스코프 객체입니다.

controller, directive, factory, filter, service, animation, config 및 run 등의 모듈 팩토리 메서드는 Dependency Injection(DI; 의존성 주입)을 통해 인수를 수신합니다.DI의 경우 스코프 오브젝트에 달러 접두사(예:$140입니다. 이유는 주입된 인수가 주입 가능한 객체의 이름 뒤에 $($) 프리픽스가 붙는 것과 일치해야 하기 때문입니다.

를 들어 다음과 같이 스코프 및 요소 개체를 컨트롤러에 주입할 수 있습니다.

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

directive linker 함수와 같은 메서드가 종속성 주입을 통해 인수를 수신하지 않는 경우 $ 접두사(scope)를 사용하지 않고 스코프 개체를 전달합니다.그 이유는 passing 인수가 발신자에 의해 수신되기 때문입니다.

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로 수신되며, 비의존성 주입 범위 오브젝트는 스코프 또는 임의의 이름으로 수신됩니다.

이 동작의 이유는 컨트롤러와 달리 디렉티브는 의존성 주입을 사용하지 않고 뷰 뒤에 배치된 컨트롤러에 의해 작성된 범위를 통과하기 때문입니다.이것은 매우 까다롭기 때문에 다른 범위에서 지시를 재사용할 수 있습니다.

$"$scope"스코프 값이 현재 컨텍스트에 삽입되고 있음을 나타냅니다.

$scope에 의해 제공되는 서비스입니다.$scopeProvider. Angular의 내장 의존성 인젝터를 사용하여 컨트롤러, 디렉티브 또는 기타 서비스에 주입할 수 있습니다.

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

의 줄임말이다

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

하지만,scope어떤 것이든 될 수 있고, 함수 파라미터 이름일 수 있습니다.foo또는a12342saa.

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

"$scope"의 "$"는 스코프 값이 현재 컨텍스트에 삽입되고 있음을 나타냅니다.그러나 범위에 대한 참조가 모두 종속성 주입에 기반하는 것은 아닙니다.

언급URL : https://stackoverflow.com/questions/19288586/angularjs-scope-vs-scope

반응형