0

меня JSFiddle как это: https://jsfiddle.net/ownvjjow/Rendering части компоненты за пределами самого компонента

В основном проблема заключается в том, что я хотел бы оказать какую-то часть компоненты x снаружи элемента (x) сам. Как и во внешнем объеме, но с сохранением его объема в другом компоненте (y). У меня есть часть компонента, которая может быть отображена с помощью targetElement, но похоже, что у ng-repeat есть некоторые проблемы. Сценарий возвращает некоторую другую ошибку, которую я получаю в своем приложении: enter image description here Я мог бы разорвать часть, которую я хочу «переместить» в качестве другого компонента, затем условно отобразить ее в другом месте, предоставив bindings: {... , controller: '<'}, а затем разоблачить область действия от компонента x до x.y, но мне было интересно, если есть возможность скомпилировать эту часть компонента x и ввести в другое место все, что работает правильно.

Я не уверен, что мой подход прав, или, может быть, я должен подумать о чем-то другом, если вы знаете какое-либо другое решение/идею, тогда я был бы признателен, если бы вы сообщили мне об этом.

+0

Если у вас одинаковое происхождение данных ... внешний компонент может генерировать свои данные независимо от первого компонента. Попытайтесь изолировать этот компонент. –

+0

Не знаю, понимаю ли вы, что вы имеете в виду, я знаю, что компоненты должны быть изолированы друг от друга, но мне нужно показать часть компонента в том месте, которое находится за ее пределами (в элементе, указанном в 'targetElement'). Я не особо уверен, что это лучший способ добиться этого, но я не вижу других способов сделать это и оставаться гибким. –

ответ

2

fiddle

if(this.options.targetElement) { 
    var parentElem = angular.element((this.options.targetElement)); 
    var childElem = $compile(this.container)($scope)[0]; 
    $timeout(function(){ 
     parentElem.append(childElem); 
    }, 0, false); 
    } 

Это даст AngularJS время, чтобы закончить его компиляции.

Надеюсь, что эта помощь.

+0

Прохладный, полностью забыл, что '$ compile' является асинхронным. Отличный ответ, спасибо! –