2013-07-26 5 views
0

제목이 약간 잘못 될 수는 있지만 더 나은 설명은 생각할 수 없습니다. 지시어 범위 선택

나는 포함하는 지시어를 쓴 ng-repeat :

app.directive('appDirective',function($purr){ 
    var template = '' + 
     '<div ng-repeat="elements in queue">' +    
     '</div>'; 

    return{ 
     template: template 
    } 
}); 

내가 올바른 해요, 난이

1 내 지시에 queue을 제공하는 두 가지 방법 중 하나를 선택할 수 있습니다 기능

연결을 통해
return{ 
     restrict: 'A', 
     template: template, 
     link: function(scope){ 
       scope.queue =[]; 
     } 
    } 

2 : via 컨트롤러

return{ 
     restrict: 'A', 
     template: template, 
     controller: directiveCtrl 
    } 

app.controller('directiveCtrl',function($scope){ 
    $scope.queue = []; 
}); 

내가 선택한 방법은 무엇이며 그 이유는 무엇입니까?

+1

참조하십시오. 컨트롤러는 링크 기능 이전에 실행됩니다. –

+0

고맙습니다. 이 사실로 부작용이 생길 수 있습니까? – user2422960

+1

나는 그것을 의심한다. 사람들이 링크 함수에서 범위 속성을 설정하고 컨트롤러 함수에서 액세스하려고 시도한 몇 가지 예를 보았습니다 (그리고 왜 그것이 아직 존재하지 않는지 궁금해했습니다). –

답변

1

지시어의 링크 기능과 컨트롤러 기능 간에는 약간의 차이가 있습니다. 일반적으로 메소드, $ watch 등을 둘 중 하나에 넣을 수 있습니다. 컨트롤러가 먼저 실행되며 때로는 중요합니다. 프레임 워크의 나머지 부분과 일관성을 유지하기 위해 범위 조작 함수를 컨트롤러에 넣을 수 있습니다.

This fiddle 컨트롤러 및 링크 기능이 두 개의 중첩 된 지시문과 함께 실행될 때 기록됩니다.

그것은 아마 문제가되지 않습니다 또한 Difference between the 'controller', 'link' and 'compile' functions when defining a directive

. 
+0

설명해 주셔서 감사합니다. 개인적으로 컨트롤러를 적용하는 것이 더 정확하다고 느낍니다. 반면에, 나는 두 번째 방법이 더 효과적이라고 생각했을 것입니다. – user2422960