2013-11-05 4 views
1

비슷한 위젯을 생성하는 지시문이 있습니다. 각 위젯에는 다양한 지시문이 있습니다. 사용하는 데 필요한 지침을 선언템플릿에 지시어 이름을 전달하는 방법 - Angular.js

template: '<li><div {{widgetModel.directiveName}}></div></li>' 

나는 변수를 걸려는 화해하고 또는 템플릿 : 여기가 내 위젯을 만들 때 사용하는 템플릿입니다. 템플릿은 다음이 될 것입니다 :

template: '<li><div directive-name></div></li>' 

그때는 directiveName의 속성 이름을 가진 일반 지침 역할을합니다. 이것은 현재 코드에서 발생하지 않고 필요에 따라 동작하는 방법을 모르겠습니다. directiveName 지시문은 실제로 아무것도 될 수 있습니다.

+0

한 줄의 코드는 문제를 설명하지 않습니다. 지금 템플릿에서 어떤 결과가 나오나요? 출력을 위해 당신은 무엇을 기대합니까? 지시어는 마크 업에서 3 가지 다른 방법으로 확인할 수 있습니다 – charlietfl

+0

camelCase 대신 대시로 구분 된 지시어의 이름을 사용하고 있습니까? – dimirc

+0

아니요, 제 질문을 업데이트했습니다. – jhamm

답변

1

당신은 컴파일 기능에서 이러한 변화 할 수있는 :

angular.module('myWidgets', []) 
    .directive('multiDirective', function() { 
    return { 
     restrict: 'E', 
     compile: function(element, attrs) 
     { 
      var htmlText = '<ul>' + 
        '<li ' + attrs.directiveName + '>' + '</li>' + 
       '</ul>'; 
      element.replaceWith(htmlText); 
     } 
    } 
}) 

을 그리고 당신은이처럼 호출 할 수 있습니다

<multi-directive directive-name='widget1' /> 
0

나는 Angular Dynamic Templates 블로그 게시물에서 힌트를 기반으로 a CodePen example을 만들어 그 I 다른 게시물에서 참조 된 톱.

<div ng-controller="ExampleCtrl"> 
    <div ng-repeat="dir in dirs"> 
    <div smart /> 
    </div> 
</div> 

및 컨트롤러 이런 식으로 뭔가 보이는 가정 :

function ExampleCtrl($scope) { 
    $scope.dirs = ["<div dir-a />","<div dir-b />"]; 
} 

smart 지시어는 다음과 같이 수 :

을 다음과 같은 HTML을하기 위해

.directive('smart', function($compile) { 
    return { 
     restrict: 'AE', 
     link: function (scope, element) { 
     element.html(scope.dir); 
     $compile(element.contents())(scope); 
     } 
    }; 
}); 
관련 문제