AngularJS와 달러 변수 사용


128

angularJS에서 달러 방법과 변수를 사용하는 이유는 소화가 진행될 때 angularJS가 그 값을 확인하지 않도록 지시하는 것입니까? 따라서 각도가 $scope.$value와를 $scope.value만나면 변수 이름에 달러 문자가 접두어로 붙어 있기 때문에 전자를 검사하지 않아도 됩니까?


angularjs에서 "$ scope"와 "scope"차이점 에 대한이 블로그 게시물을 참조하십시오 .
MarcoS

19
Angular는 아마도 jQuery에서 $를 빼려고합니다.
daniel1426

이 링크는 $ scope에 대해 많이 설명하지 않는 페이지로 리디렉션됩니다.
Paul Brannan

5
지시문-컨트롤러에는 문서가 $scope있지만 지시문에는 문서 가 scope있습니다. WTF?
LeeGee

답변:


87

Angular는 접두사로 시작하는 변수를 무시하는 경우가 몇 번 있습니다.

  1. Schumli의 코멘트 , 아래의 경우 JSON 필터는 출력을하지 않습니다
  2. {{ }}지시문을 사용할 때 angular는 중첩 $ 변수를 표시하지 않습니다 . 예를 들어 visible속성 만 표시합니다 .

    <div ng-init="n = { visible: 'foo', $ignore: 'bar' };">{{ n }}</div>
  3. 또한 범위 개체에 명시 적 감시자를 추가 할 때이 개체의 선행 달러 기호가있는 속성을 변경해도 감시자가 트리거되지 않습니다. 이 업데이트 된 바이올린을 참조하십시오 .

  4. angular.equals() 접두사가 붙은 키는 무시합니다$ .


그래 네가 옳은 것 같아 클릭 이벤트 등으로도 여전히 변경됩니다. 감사합니다.
matsko

7
Angular에는 접두사가 붙은 속성을 무시하는 특정 부분이 있습니다. 예를 들어 'json'필터는 '$'로 시작하는 변수를 출력하지 않습니다.
Schmuli

116

아래 스 니펫 http://docs.angularjs.org/tutorial/step_05 의 명명 규칙입니다.

'$'접두사 명명 규칙
고유 한 서비스를 만들 수 있으며 실제로 11 단계에서 정확하게 수행합니다. 명명 규칙으로 앵귤러의 기본 제공 서비스, 스코프 메서드 및 기타 앵귤러 API에는 '$'접두사가 있습니다. 이름 앞에. 가능한 이름 충돌을 피하기 위해 서비스와 모델의 이름을 지정할 때 '$'접두사를 사용하지 마십시오.

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

Angular 네임 스페이스
우연한 이름 충돌을 방지하기 위해 Angular는 $와 충돌 할 수있는 개체 이름을 접두사로 사용합니다. 실수로 각도 코드와 충돌 할 수 있으므로 코드에 $ 접두사를 사용하지 마십시오.


2
지시문 doc [1]이 $scope제어기에 있지만 지시문에있는 이유는 무엇 scope입니까? --- [1] docs.angularjs.org/guide/directive
LeeGee

2
@LeeGee 그것은 단지 컨벤션입니다. stackoverflow.com/a/19289054/114558
rinogo

30

$프리픽스 각도의 코어에 속하는 변수, 파라미터, 특성, 또는 방법을 나타낸다.

프레임 워크 내에서 시작되었지만 실제로는 API의 일부가 아닌 객체의 속성 은 개인 메서드 또는 속성 을 나타 내기 위해 시작 $하거나 심지어 시작 하기도 합니다. 이것은 다른 라이브러리에서 접두사가 자주 사용되는 것과 같은 방식 입니다.$$_

프레임 워크 자체에서 특별한 의미를 부여 할 수 있지만 런타임에서 코드를 해석하는 방식에는 영향을 미치지 않습니다. 기본적으로 "네가 엉망이되어서는 안된다"는 명명 규칙입니다.


당신이 오해하는 것 같아요 런타임은 이름이 무엇 변수 상관하지 않는다. 당신은 그것을 호출 할 수 있습니다 $$__$_$– 그것은 해석기에 특별한 의미가없는 식별자 일뿐입니다.
dalgard

런타임과 프레임 워크의 차이점을 강조하기 위해 몇 단어를 추가했습니다. 당신의 투표를 바꿀만큼 친절하십시오.
dalgard

7

확실하지는 않지만 AngularJS 내부는 다이제스트 중에 $ 접두사 변수를 조작하는 데 의존한다고 생각합니다. 이러한 변수를 확인하면 다이제스트의 각주기 동안 끊임없이 변경 될 수 있으므로 다이제스트가 안정화되지 않습니다.

그래도 인용하지 마십시오. :)


10
"나를 인용하지 마십시오"때문에 공감. 죄송하지만, 불확실성을 인정하는 답변은 그다지 유용하지 않습니다 :(
David Rivers

2
Downvote가 상향으로 변환되었습니다. 당신이 옳다고 가정하면, 이것은 유용한 답변입니다!
David Rivers

2
@DavidRivers, 대답이 처음에 망설 였다면 다시 말하면 더 유용하지 않습니다. 실제로 대답은 틀릴 수 있으며 망설임의 부족은 잠재적 인 틀린 것을 주장 할 것이다 . 대신이 답변이 유용한 것으로 간주 되려면 신뢰할 수있는 출처 를 인용하여 몇 가지 증거로 백업 하거나 표현 된 포인트를 재현하기위한 바이올린을 제공해야합니다.
Ivaylo Slavov

1
@IvayloSlavov : 나는 당신에게 절대적으로 동의합니다. 나는 응답자가 자신이 옳다는 것을 재확인했으며 불확실성을 제거하기 위해 단순히 답을 바꾸지 않았다고 가정했다. 소스 나 바이올린을 원 했어야한다고 생각합니다.
David Rivers

1
@AlexFord : 안녕하세요. 사과 해 주셔서 감사합니다! 어쨌든 명확하지 않아서이 모든 잘못된 의사 소통을 시작한 것이 유감입니다. 당신의 요지는 유효하며 동의합니다. 나는 단지 내가 잘못 표현되지 않도록하고 싶었지만, 내 자신의 말로 명확하지 않았다. 어쨌든, 힘든 감정은없고 당신이 내 관점을 볼 수 있다는 것을 정말로 존중합니다. 건배!
David Rivers

5

나는 항상 $서비스의 "S"처럼 보인다.


정답입니다. 논리적이고 간단합니다. 이들은 실제로 서비스이므로 $ 'S'는 서비스를위한 것임을 기억하는 것이 좋습니다. 좋은 간단한 설명.
Yonk

2
$ scope는 서비스입니까?
deadend

5

달러 ( $ ) 기호는 특정 지시문에서 요소가 반복 (또는 해석)되는 것을 방지합니다. 예를 들어 $ 로 시작하는 속성 은 for 루프의 if 절ng-repeat 때문에 사용되지 않습니다 .

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

누군가 각도 github 페이지 의 주제에 대해 문제 를 일으켰습니다.


메소드 shallowCopy에서 $$ 로 시작 하는 특성은 특성을 반복하는 동안 if 절로 인해 건너 뜁니다 .

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

1

@MarcoS 는 $ scope와 scope의 차이점을 설명하는 https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope 에 대한 링크를 제공했습니다 . 다른 답변의 정보를 추가하여 이것이 유용하다는 것을 알았습니다.

각도 지시문에는 링크와 컨트롤러가 있습니다. 링크는 범위, 요소, 속성 오브젝트와 같은 고정 된 매개 변수 세트가있는 표준 기능입니다.

컨트롤러의 인수는 Angular 인젝터에 의해 관리되며 순서에 의존하지 않습니다. 인젝터는 $로 시작하는 매개 변수를 찾아 전달할 오브젝트를 분석합니다.

https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope 의 저자가 더 잘 설명합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.