2016-03-13 3 views
0

Im пытается переписать мой собственный проект от углового 1 до углового 2 и мне нужна компиляция директивы, но я не могу переписать его, чтобы выполнить ту же работу, что и раньше.

app.directive("compile", compile); 
compile.$inject = ["$compile"]; 
function compile($compile) { 
    return function ($scope, element, attrs) { 
     $scope.$watch(
      function ($scope) { 
       return $scope.$eval(attrs.compile); 
      }, 
      function (value) { 
       element.html(value); 
       $compile(element.contents())($scope); 
      } 
     ); 
    }; 
} 

Я знаю, что нет наблюдателей в Angular2, но есть ли шанс, что я могу получить такую ​​же функциональность в Angular2?

И мне нужно работать с данными, как это (я имею в виду компилировать с ребенком составить директиву тоже):

Контроллер:

function Controller($scope) { 
    $scope.Test1 = '<div compile="Test2"></div>'; 
    $scope.Test2 = '<h1>Test!</h1>'; 
} 

HTML:

<div compile="Test1"></div> 

Имейте в виду, что валы Test1 и Test2 можно изменять динамически в любое время.

Все это должно печатать как результат:

<div compile="Test1"> 
    <div compile="Test2"> 
     <h1>Test!</h1> 
    </div> 
</div> 

ответ

0

Угловые 2 не имеет никакого эквивалента $compile, намеренно, я думаю, потому что его использование, как правило, является показатель плохого дизайна.

Для чего это необходимо? Вам действительно нужна способность динамически вставлять абсолютно ничего в ваш шаблон? Если просто выбрать один компонент для отображения из готового списка доступных компонентов, то либо *ngSwitch, либо маршрутизатор может выполнить эту работу.

0

DynamicComponentLoader является ближайшим вы получите. С DCL вы можете вставлять произвольные компоненты в DOM динамически.

Смежные вопросы