2016-12-12 2 views
0

$state.params에 따라 변경되는 동적 버튼을 사용하여 ng-repeat를 만들려고 했으므로 지시문에 래핑했습니다.Angularjs 1.5 지시어 요소 html을 대체합니다.

link:function(scope,element,attrs) { 
$rootScope.$watch('params.source',function() { 
    var link = scope.link; 
    var name = scope.name; 
    var href = $state.href('home',{source:link}); 
    if($state.params.source.indexOf(scope.link) == -1) { 
     var template = '<a href="'+href+'" class="btn 
      btn-default">'+name+'</a>'; 
    } 
    else template = '<a href="'+href+'" class="btn 
     btn-default">'+name+' what!?</a>'; 
    el = $compile(template)(scope); 
    element.replaceWith(el);      
}); 
} 

그러나 params의 첫 번째 변경 후 는 element는 잊어 및 Cannot read property 'replaceChild' of null

어떻게 element를 대체 할 수와 답한다?

편집 : NG-쇼 또는

NG-경우 감사를 사용할 수없는 이유는 최종 제품에서 다른 sowmething의 전체 요소를 교체 할 필요가, 즉입니다!

답변

2

html로 ng-hide 또는 ng-show를 사용하는 것이 더 나을 것 같습니다. 다음과 같은 내용 일 수 있습니다.

<div ng-repeat="yourArray as item"> 
    <a href="{{item.href}}" class="btn 
    btn-default">{{item.name}} <section ng-show="conditionToShow">what!?</section></a>'; 

</div> 

이것은 조금 더 깨끗한 시계이므로 시계를 추가하지 않아도됩니다. 시계는 비싸기 때문에 가능한 한 피해야합니다.

편집 :.

때문에 각도이 방금 한 조건에 따라 이러한 요소의 프리젠 테이션을 제어 할 수 있습니다 NG 쇼와 NG 숨기기 지침을 모두 제공한다는 사실을
<div ng-repeat="yourArray as item"> 
    <div class="singleBtn" ng-show="conditionToShow" > 
     <a href="{{item.href}}" class="btn btn-default">{{item.name}}</a> 
    </div> 
    <div class="multiBtn" ng-hide="conditionToShow"> 
     <a //rest of multi btn code 
    </div> 

</div> 

(즉, 당신의 state.params)

true 일 경우 하나의 btn 만 표시되고 false이면 여러 버튼이 표시됩니다. 논리를 뒤집을 필요가 있다면 ng-show와 ng-hide를 전환하십시오.

이번에는 당신의 필요가 더 잘 이해되기를 바랍니다.

+0

고마워 Craig, "what"부분은 개념이 작동하는지 확인하는 것임을 언급하는 것을 잊어 버렸습니다. 조건이 충족되면 전체 버튼을 다른 것으로 바꾸기 위해이 작업을 수행합니다. 모든 것을 대체해야하므로 ng-hide/show와 함께 작동하도록 할 수는 없습니다. 내 질문에 분명히하겠습니다. – thomas

+0

콘텐츠가 다른 두 가지 유형의 요소간에 전환 만 할 예정입니까? 'a' 태그와'div' 태그와 같은 것입니까? – CraigR8806

+0

아이디어는 활성화되었을 때 버튼을 여러 버튼 (예 : 하위 메뉴)으로 바꾸는 것입니다. 그래서'$ state'가 바뀔 때 'a'와'a '의 목록을 바꾸어야합니다. (원래는 안됩니다.) – thomas

관련 문제