2014-06-21 5 views
2

가 나는 이 AngularJS 지시문은 한 번만 호출됩니까?

angular.module('MainCtrl', []) 
    .controller('MainController', function($scope) { 
     $scope.tagline = 'To the moon and back!'; 
    }) 
    .directive('mixitContainer', function() { 
     return { 
      restrict: 'A', 
      link: function(scope, element, attrs) { 
       $(element).mixItUp(scope.$eval(attrs.mixitContainer)); 
      } 
     }; 
    }); 
, 그것은 단순히 테스트

메인 컨트롤러의 단순함에 대해 걱정하지 마십시오 입니다

나는에 대한 지시 모듈을 만들어 내 각 페이지의 내부와 그렇게하기 위해 mixitup 밀어하기 위해 노력하고있어 .

이제 문제는 지시문이 한 번만 호출된다는 것입니다. 다른 페이지로 이동하여 각도를 요청하여 다른 컨트롤러를로드 한 다음 홈 페이지로 돌아가 각도가 MainCtrl을 다시로드하도록 요청하면 지시문이로드되지 않습니다!

을 Heres하여 지시문 :

<div id="Container" class="mixit-container" mixit-container="{load: {sort: 'order:asc'}, controls: {toggleFilterButtons: true, toggleLogic: 'and'}}"> 

누구나 어떤 아이디어를 가지고?

+0

가능하면 피들 또는 그와 같은 옵션을 지정하십시오. – dotnetstep

+0

@dotnetstep 시도 하겠지만 힘든 일 이겠지요. : –

+0

""각도를 사용하여 MainCtrl을 다시로드 하시겠습니까? " –

답변

1

AngularJS에는 라우팅 기능이 포함되어 있지 않습니다. 그것들은 ngRoute (코어이지만 선택적인 모듈), ui-router (ngRoute는 매우 훌륭하게 만들었습니다) 또는 다른 대체물에 의해 제공됩니다. 당신은 당신이 사용하는 말을하지 않고 각각 다른 행동을 취합니다.

어느 쪽이든간에 이것은 라우터가 아닌 지시자에게 전달됩니다. 필요할 때마다 지시문이 호출됩니다. 그것은 스스로 제어하지 못합니다. '필요한 것'은 Angular가 DOM의 일부를 컴파일하는 것을 말하며, 대개 템플릿 파일에서 실행되고 지시문을 실행했습니다. 그것은 지시를 부르고 그것을 "지금 무엇?"물을 것이다.

위의 라우터는 서로 다른 동작을하며, 내부적으로 구성하는 방법에 따라 달라집니다. 이 모든 것들에서 템플릿을 다시 정렬하거나 렌더링하지 않도록 배치 할 수 있습니다. 예를 들어, ui-router에서 '자식'상태를 가질 수 있습니다. 자식 상태가 활성화되어 있으면 부모도 활성화되어 있으므로 자식에서 부모로 이동하면 이미 이전에 수행 되었기 때문에 템플릿을 다시 렌더링하지 않습니다. 그리고 문제를 더욱 복잡하게 만들려면 $stateChangeStart 이벤트를 연결하고 필요하다고 생각하지 않더라도 라우터가 해당보기를 다시 그리도록 강제 할 수 있습니다.

이 모든 것이 의미하는 바는 ... 지시어 옆에주의를 기울이십시오. 높은 수준에서 원하는대로 행동하면 원하는대로 할 것입니다. 유무선 공유기가 예상대로 작동하면 행복해집니다!

관련 문제