2014-09-14 2 views

답변

3

설명문은 현재 $scope의 컨텍스트에서 평가되므로 참조 할 모든 항목은 $scope에 선언해야합니다.

예컨대 :

.controller('someCtrl', function ($scope, $window) { 
    $scope.alert = $window.alert.bind($window); 
    // Or 
    // $scope.alert = function (msg) { $window.alert(msg); } 
}); 

참조, 또한,이 short demo.

3

Angular는 표현식을 평가하기 위해 JavaScript의 eval()을 사용하지 않습니다. Angular의 $ parse 서비스는 이러한 표현을 처리합니다.

각도 표현식은 창, 문서 또는 위치와 같은 전역 변수에 액세스 할 수 없습니다. 이 제한은 의도적 인 것입니다. 미묘한 버그의 공통 원인 인 전역 상태에 대한 우발적 인 액세스를 방지합니다.

대신 표현식에서 호출 된 함수에서 $ window 및 $ location 같은 서비스를 사용하십시오. 이러한 서비스는 전역에 대한 조롱 가능한 액세스를 제공합니다. 당신이 당신의 컨트롤러 기능 경고를 작성하거나

angular.module('test',[]).controller('testCtrl',function($scope){ 
     $scope.alert = function(text){ 
      alert(text) 
     } 

}) 

here is updated example

from docs

+0

의 답에서 $ 윈도우 서비스 참조를 주입해야 의미

는'$의 location'을 의미하는 것 '$ window '가'window'와 어떤 관계가 있는지'window.location'에 있습니다 (전혀 사실이 아닙니다). – gkalpak

+0

내가 왜 $ 위치가 창을 가리키는 지 생각했다. 위치? –

+0

그리고'$ window.alert()'대신'alert()'를 사용하여) 전역 상태에 직접 접근하고 있습니다. 테스트 가능성을 상하게 함 :) – gkalpak

관련 문제