2014-06-21 3 views
0

지시어에 범위 변수를 자바 스크립트 변수로 가져오고 싶습니다. 내 코드는 다음과 같습니다.지시어에 scope 변수를 어떻게 사용할 수 있습니까?

app.controller("Home", ["$scope", function($scope) { 
    ... 
    $scope.nb_msg = data.length; 
    ... 
}]); 

app.directive("myDiv", function() { 
    // Here, i want to get $scope.nb_msg 
    var nb_msg = ???; 
    var result = []; 
    // do something with nb_msg to get result 
    var template = ""; 
    ... 
    for(var i=0; i<10; i++) { 
     template += "<span>" + result[i] + "</span>"; 
    } 
    ... 

    return { 
     restrict: "E", 
     template: template 
    }; 
}); 

어떻게하면됩니까? 미리 감사드립니다!

답변

2

당신은 당신의 링크 기능의 범위를 액세스 할 수 있습니다에서 사용할 수있는 변수가됩니다

app.directive("myDiv", function() {  
    return { 
     restrict: "E", 
     template: '<span ng-repeat="i in result">{{i}}</span>', 
     link: function(scope, element, attr) { 

      // Here, i want to get $scope.nb_msg 
      var nb_msg = scope.nb_msg; 
      scope.result = []; 
      for(var i=0; i<10; i++) { 
       scope.result.push(i); 
      } 


     } 
    }; 
}); 
+0

감사합니다,하지만 템플릿 변수는 링크 기능 내부는? 이 지침의 템플릿을 설정하는 데 사용할 수 있다고 생각합니까? 아니면 링크 함수에서 반환해야합니까? 죄송합니다. 저는 angularjs에서 아주 새로 왔습니다. –

+0

템플릿은 일반적으로 지시문 요소의 하위 요소입니다. Angular는 자동으로 템플릿을 컴파일하고 링크하여 지시어 요소의 자식으로 추가합니다. HTML 조각을 동적으로 컴파일하고 링크 할 수도 있지만, Angular의 템플릿 메커니즘을 사용할 수 있다면 그렇게해야합니다. – pixelbits

+0

알겠습니다. 고맙습니다. 나는 한 가지 문제 만 가지고있다. 내가 전에 정의 할 수 없기 때문에 지시문에 CSS 블록을 추가하고 싶습니다. 변수 nb_msg를 기반으로합니다 : @keyframes myAnimation, 백분율은 nb_msg에 달려 있습니다. 예 : nb_msg = 2 인 경우 0 %, 50 %, 100 %이어야합니다. nb_msg = 3; 0 % 30 % 50 % 70 % 100 %. 그것은 내가 CSS 블록을 추가하는 데 도움이되는 위의 템플릿을 작성해야하는 이유입니다. 그래서 지시문에이 CSS 블록을 만들 수 있습니까? 그리고 내가 어떻게 할 수 있니? 많은 감사합니다 !!! –

0

지시어가 격리 된 범위를 만들지 않으면 변수가 지시문 컨트롤러, 컴파일 및 링크 기능 안에서 사용할 수 있습니다. 사용 - 당신의 지시가 당신이 그것을 좋아하지 않을 수없는 고립 된 범위를 만들 않는 경우가 컨트롤러 변수에 액세스 할 수 있도록

이 지침은 다른 선택

1을 수행 outide 컨트롤러를 인식하지 못합니다 컨트롤러 변수는 지시어의 속성 값으로 사용하고 2 방향 바인딩을 제공하려는 경우 범위에서 '='을 사용하여 연결합니다.

두 번째 - 서비스 내부에서 공유 할 변수를 두어 컨트롤러와 지시문에 모두 주입합니다.

제 3의 (권장하지 않음) 컨트롤러 범위에 액세스하려면 $ parent를 사용하십시오.이 방법은 항상 사용자의 지시문이 항상 해당 컨트롤러 안에 포함될 것으로 가정합니다.

참고. 어떤 경우에는 지침 정의 기능

관련 문제