2014-11-20 2 views
0

AngularJS의 조건부 부분 - 같은보기에 관한 질문이 있습니다. 아래의 예는별로 좋지 않습니다. 또한 $compile(element.contents())(scope)에 속하는 오류를 반환합니다.이 오류는 scope을 함수로 사용할 수 없다는 것을 말합니다. 그러나 그렇지 않으면 모든 것을 올바르게 렌더링하지 못합니다.AngularJS의 조건부보기

  1. 나는 경로를 요청하고 있습니다를 객체

    내가 모든 개체에 대해 개체의 배열

  2. 을 반환 ng-repeat 해요

  3. 의 배열을 반환 $http 이상 : 사용 사례는 다음과 같습니다 (obj) obj.view_edit 값이 주어집니다. <plugin></plugin> 지침의 모습

를 삽입

  • obj.typeplugin에 해당하는 경우 :

    directive('plugin', function($compile) { 
        var linker = function(scope, element, attrs) { 
         console.log(scope.view); 
         element.html(scope.view).show(); 
         $compile(element.contents())(scope); 
        } 
        return { 
         restrict:"E", 
         link: linker, 
         scope: { 
          view:'=' 
         } 
        } 
    }) 
    

    가하는 당신이 :

    <plugin view="content.view_edit"></plugin> 
    

    내 지침처럼 보인다 더 나은 해결책이 있습니까?

  • 답변

    1

    숨기기/표시하거나 더 복잡한 것을 다룰 때까지 $compile 님의 링크 기능에서 수동으로 DOM 조작을 할 필요가 없습니다. 기본 ng-if 지시문을 사용하면됩니다.

    <div ng-repeat="obj in objects"> 
        <div ng-if="isPlugin(obj)"> 
         <plugin view="obj.view_edit"></plugin> 
        </div> 
        <div ng-if="!isPlugin(obj)"> 
         This is not a plugin. 
        </div> 
    </div> 
    

    그런 다음 범위에 ng-if이 참조하는 기능이 있습니다. 이렇게하면 HTML을보다 깨끗하게 유지하고 최대한 많은 로직을 지울 수 있습니다.

    scope.isPlugin = function (obj) { 
        return obj.type === 'plugin'; 
    } 
    
    +0

    고마워요! 나는이 문제를 [ngSwitch] (https://docs.angularjs.org/api/ng/directive/ngSwitch)'ng-switch = "content.type"과 당신의 접근법을 사용하여 관리했다. 그리고'ng-switch-when = 모든 유형에 대해 "플러그인". – barfoos