Angular.js: angular.element.scope()λŠ” μ •μ˜λ˜μ§€ μ•Šμ€ 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2014λ…„ 10μ›” 09일  Β·  29μ½”λ©˜νŠΈ  Β·  좜처: angular/angular.js

angular.element.scope()λŠ” iframe src 속성을 λ³€κ²½ν•˜μ—¬ μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ iframe에 λ‘œλ“œλ  λ•Œ μ •μ˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ‹€μŒ μ½”λ“œλŠ” λ²”μœ„μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•˜μ§€λ§Œ μ •μ˜λ˜μ§€ μ•Šμ€ 것을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

angular.element(document.body).scope()

μœ„μ˜ μ½”λ“œλŠ” λ¬Έμ„œκ°€ λ‘œλ“œλ˜κ³  angularκ°€ λΆ€νŠΈμŠ€νŠΈλž©μ„ μ™„λ£Œν•œ ν›„ onclick ν•Έλ“€λŸ¬μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.

<script>
    document.addEventListener("click", function(){
        console.log(angular.element(document.body).scope());
    });
</script>

이 λ¬Έμ œλŠ” src 속성을 μˆ˜μ •ν•˜μ—¬ λ¬Έμ„œκ°€ iframe에 λ‘œλ“œλ  λ•Œλ§Œ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.
jquery 없이 1.3.0-rc.5둜 ν…ŒμŠ€νŠΈν–ˆμŠ΅λ‹ˆλ‹€.

jqLite more info

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

디버그 정보λ₯Ό μΌμ‹œμ μœΌλ‘œ ν™œμ„±ν™”ν•˜λ €λ©΄(예: 라이브 ν”„λ‘œλ•μ…˜ μ•±μ—μ„œ 문제λ₯Ό λ””λ²„κΉ…ν•˜κΈ° μœ„ν•΄) 여기에 μ„€λͺ…λœ λŒ€λ‘œ angular.reloadWithDebugInfo() λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ .

λͺ¨λ“  29 λŒ“κΈ€

문제의 plnkr μž¬μƒμ‚°μ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

λ‚΄ ν”„λ‘œμ νŠΈμ— λ™μΌν•œ λ¬Έμ œκ°€ μžˆμ§€λ§Œ plnkr을 μ‚¬μš©ν•˜μ—¬ μž¬ν˜„ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

scope()λŠ” λͺ¨λ“  μš”μ†Œμ—μ„œ undefinedλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

JQLite λ˜λŠ” JQuery 2.1.1을 μ‚¬μš©ν•˜λŠ” 것도 λ™μΌν•©λ‹ˆλ‹€.

AngularJS 1.3.1.

이 μ‹œλ„:

document.addEventListener('DOMContentLoaded', function () {
  angular.element(document.body).scope();
});

@VictorQueiroz ν”„λ‘œμ νŠΈμ—μ„œ 디버그 정보λ₯Ό λΉ„ν™œμ„±ν™”ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

@caitp μ°Ύμ•˜μŠ΅λ‹ˆλ‹€.

디버그 정보λ₯Ό λ‹€μ‹œ ν™œμ„±ν™”ν•˜λ©΄ 이 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

쒋은 ν•΄κ²° 방법

:슀마일: :슀마일: :슀마일:

ν•œλ™μ•ˆ λ°˜μ‘μ„ ν•˜μ§€ λͺ»ν•΄ μ£„μ†‘ν•©λ‹ˆλ‹€. 이 λ¬Έμ œλŠ” jqCache λ˜λŠ” 더 ꡬ체적으둜 expandoIdκ°€ μƒμ„±λ˜λŠ” 방식과 관련이 μžˆμŠ΅λ‹ˆλ‹€. 이전 RCμ—μ„œλŠ” idκ°€ λ‹€μŒκ³Ό 같이 μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
var expandoId = element[JQLite.expando];
μ΅œμ‹  ν•­λͺ©μ—μ„œλŠ” idκ°€ ν•˜λ“œ μ½”λ”©λœ 속성을 μ‚¬μš©ν•˜μ—¬ κ°€μ Έμ˜΅λ‹ˆλ‹€.
var expandoId = element.ng339;
λ³€κ²½ 사항을 되돌리면 λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
λΆˆν–‰νžˆλ„ λ‚˜λŠ” κ·Έ λ‚΄μš©μ— λŒ€ν•΄ 많이 μ•Œμ§€ λͺ»ν•˜λ―€λ‘œ λˆ„κ΅°κ°€ κΈ°λŠ₯에 λŒ€ν•΄ 밝힐 수 μžˆλ‹€λ©΄ μ•„λ§ˆλ„ 문제λ₯Ό 더 μžμ„Ένžˆ μ„€λͺ…ν•  수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

였 μ™€μš° κ°μ‚¬ν•©λ‹ˆλ‹€ @caitp μ €λ₯Ό 미치게
$compileProvider 의 λ¬Έμ„œμ— $compileProvider.debugInfoEnabled(false) κ°€ μ˜ˆμƒλ˜λŠ” λ™μž‘μΈ 경우 scope() ν•¨μˆ˜κ°€ μ •μ˜λ˜μ§€ μ•Šμ€ 값을 λ°˜ν™˜ν•˜κ²Œ ν•œλ‹€κ³  μ„€λͺ…ν•˜λŠ” λ©”λͺ¨κ°€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

νŽΈμ§‘: λ‚΄ λ‚˜μœ, 그것은 이미 λ¬Έμ„œμ— μžˆμŠ΅λ‹ˆλ‹€

DOM μš”μ†Œμ— λŒ€ν•œ 바인딩 정보 및 ν˜„μž¬ λ²”μœ„μ— λŒ€ν•œ μ°Έμ‘° 좔가와 같은 μ»΄νŒŒμΌλŸ¬μ—μ„œ λ‹€μ–‘ν•œ 디버그 λŸ°νƒ€μž„ 정보λ₯Ό ν™œμ„±ν™”/λΉ„ν™œμ„±ν™”ν•˜λ €λ©΄ 이 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.

이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ? debugInfoEnabled(false)κ°€ μžˆμ§€λ§Œ μ—¬μ „νžˆ μš”μ†Œμ˜ λ²”μœ„μ— μ•‘μ„ΈμŠ€ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

디버그 정보λ₯Ό μΌμ‹œμ μœΌλ‘œ ν™œμ„±ν™”ν•˜λ €λ©΄(예: 라이브 ν”„λ‘œλ•μ…˜ μ•±μ—μ„œ 문제λ₯Ό λ””λ²„κΉ…ν•˜κΈ° μœ„ν•΄) 여기에 μ„€λͺ…λœ λŒ€λ‘œ angular.reloadWithDebugInfo() λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ .

@gkalpak이 μ—¬κΈ°μ—μ„œ μ„€λͺ…ν–ˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€!

μ™œ 폐쇄? ν•΄κ²° 방법을 μ°ΎλŠ” 것이 λ¬Έμ œκ°€ μˆ˜μ •λ˜μ—ˆμŒμ„ μ˜λ―Έν•˜λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€. scope()λŠ” 디버그 λͺ¨λ“œμ— 관계없이 μ—°κ²°λœ λ²”μœ„λ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

κ°€λŠ₯ν•˜μ§€ μ•Šλ‹€λ©΄ angular.element #scope() λ¬Έμ„œμ—

@Toilal 이 μŠ€λ ˆλ“œμ˜ 이전 μ˜κ²¬μ—μ„œ μ–ΈκΈ‰ν•œ λŒ€λ‘œ 이미 λ¬Έμ„œν™”λ˜μ–΄ μžˆμœΌλ―€λ‘œ λ‹«μ•˜μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‹€λ₯Έ μž₯μ†Œμ—μ„œλ„ λ¬Έμ„œν™”λ˜μ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•˜μ‹ λ‹€λ©΄ PR은 λŒ€λ‹¨νžˆ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€!

디버그λ₯Ό λΉ„ν™œμ„±ν™”ν•  λ•Œ angular.element의 λ§ˆλ…€ λ©”μ„œλ“œκ°€ μž‘λ™ν•˜μ§€ μ•Šμ„μ§€ ν™•μ‹ ν•˜μ§€ λͺ»ν•˜κΈ° λ•Œλ¬Έμ— ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ‚΄κ°€ μ‹œλ„ν–ˆκΈ° λ•Œλ¬Έμ— scope()λŠ” ν™•μ‹€ν•˜μ§€λ§Œ controller(), injector()와 같은 λ‹€λ₯Έ 것듀은 μ–΄λ–»μŠ΅λ‹ˆκΉŒ?

ν…ŒμŠ€νŠΈ ν›„μ—λŠ” scope() 및 isolateScope()μ—λ§Œ 영ν–₯을 μ€λ‹ˆλ‹€. λ‚˜λŠ” 그것듀을 λ¬Έμ„œν™”ν•˜κ³  PR을 ν•  것이닀.

κ·ΈλŸ¬λ‚˜ 디버그 정보λ₯Ό λΉ„ν™œμ„±ν™”ν•œ μƒνƒœμ—μ„œ DOM μš”μ†Œμ—μ„œ λ²”μœ„λ₯Ό κ²€μƒ‰ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

@Toilal - μ‹€μ œλ‘œλŠ”

ν•˜μ§€λ§Œ κ·Έλ ‡κ²Œ ν•  수 μžˆλŠ” μ§€μ‹œλ¬Έμ„ μž‘μ„±ν•˜κ³  확인해야 ν•˜λŠ” μš”μ†Œμ— λ°°μΉ˜ν•˜λŠ” 것은 그리 어렡지 μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€.

@pkozlowski-opensource κ°μ‚¬ν•©λ‹ˆλ‹€. λ¬Έμ„œμ—μ„œ scope() 및 isolateScope()에 λŒ€ν•œ μž‘μ€ λ¬Έμž₯을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. κ·Έ 방법이 λ‚΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 이유λ₯Ό νŒŒμ•…ν•˜λŠ” 데 μ‹œκ°„μ΄ 걸리기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

@ocombe λ‚΄κ°€ ν•  일은 UI ꡬ성 μš”μ†Œλ₯Ό μž‘μ„± 쀑이고 μ΅œμ’… κ°œλ°œμžκ°€ 디버그 정보λ₯Ό λΉ„ν™œμ„±ν™”ν•  수 μžˆμœΌλ―€λ‘œ scope/isolateScope에 μ˜μ‘΄ν•  수 μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€(ꢌμž₯ 사항).

setTimeout(ν•¨μˆ˜() {
console.log(angular.element(document.body).scope());
}, 100);

qq 20160115164505

@ronnievdv

이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ? debugInfoEnabled(false)κ°€ μžˆμ§€λ§Œ μ—¬μ „νžˆ μš”μ†Œμ˜ λ²”μœ„μ— μ•‘μ„ΈμŠ€ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

μ§€μ‹œλ¬Έ μ •μ˜μ˜ link ν•¨μˆ˜μ—μ„œ λ‹€μŒ snipet _(ꢌμž₯ν•˜μ§€ μ•ŠμŒ)_ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.

link: function(scope, element, attrs) {
  var isolatedScope = scope.$$childTail;
}

debugInfoκ°€ λΉ„ν™œμ„±ν™”λ˜μ—ˆκ±°λ‚˜ 이에 λŒ€ν•œ ν”Œλž˜κ·Έκ°€ μžˆλŠ”μ§€ 확인할 수 μžˆλŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

μ•± λ‚΄μ—μ„œ $compileProvider.debugInfoEnabled() μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
디버그 정보가 λΉ„ν™œμ„±ν™”λœ 라이브 μΈμŠ€ν„΄μŠ€(예: ν”„λ‘œλ•μ…˜ 배포)λ₯Ό λ””λ²„κ·Έν•˜λ €λŠ” 경우 μ½˜μ†”μ—μ„œ angular.reloadWithDebugInfo() λ₯Ό ν˜ΈμΆœν•˜λ©΄ 디버그 정보가 ν™œμ„±ν™”λœ 앱이 λ‹€μ‹œ λ‘œλ“œλ©λ‹ˆλ‹€.

@gkalpak 디버그 정보가 ν™œμ„±ν™”λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. μ•½κ°„ μ΄λ ‡μŠ΅λ‹ˆλ‹€.

if(angular.isDebugInfoEnabled()) {
  // Do something
}

@hemkaran , 당신이 그것을 ν™•μΈν•˜κ³  싢은 _μ–΄λ””_μ—μ„œ_ λΆ„λͺ…ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λ‹Ήμ‹ μ˜ μ•± λ‚΄λΆ€μ—μ„œ κ°€μ •ν•©λ‹ˆλ‹€.
사싀이라면 $compileProvider.debugInfoEnabled() μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@Toilal 그런 μ§€μ‹œλ¬Έμ„ μž‘μ„± ν–ˆμŠ΅λ‹ˆκΉŒ? κ·Έλ ‡λ‹€λ©΄ κ³΅μœ ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? μ§€κΈˆ 이 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λ‚΄κ°€ 해결책을 찾을 것이라고 κ°€μ •ν•˜μ§€λ§Œ, 그것을 ν•΄κ²°ν•˜λŠ” 방법에 λŒ€ν•œ 두 번째 μ˜κ²¬μ„ κ°–λŠ” 것은 μ •λ§λ‘œ 해둭지 μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€.
cc @ocombe

μ£„μ†‘ν•©λ‹ˆλ‹€. 더 이상 Angular 1을 μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©° κ·ΈλŸ¬ν•œ μ§€μ‹œλ¬Έμ„ μž‘μ„±ν•  ν•„μš”κ°€ μ—†μ—ˆμŠ΅λ‹ˆλ‹€(개발 λͺ¨λ“œμ—μ„œλ§Œ 이 정보가 ν•„μš”ν–ˆκΈ° λ•Œλ¬Έμ—)

λ‚˜λŠ” λ‹€μŒμ„ν–ˆλ‹€. νŒ€μ›λ“€μ΄ 리뷰λ₯Ό 톡해 ν—ˆλ½ν•΄μ€„μ§€ μ§€μΌœλ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€ :)

function exposeScope() {
    return {
        restrict: 'A',
        link: function(scope, element) {
            element[0].APPNAME = {
                getScope: function() {
                    return scope;
                }
            };
        }
    };
}

return {
        restrict: 'A',
        scope: false,
        link: function(scope, elem) {
            elem.data('$scope', scope);
        }
    };

ν•„μš”ν•œ 경우 $isolateScopeλ₯Ό λ™μΌν•˜κ²Œ μ„€μ •ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰