0

In this plunk私は角型UIモーダルを含むディレクティブを持っています。ディレクティブは、継承された要素を取り、モーダルに値を設定します。コンパイルされた要素をAngularディレクティブに追加しようとしていません

これはうまくいきますが、新しい要素をコンパイルしてモーダルに追加しようとすると、これは機能しません。たとえば、私はroot divにコンパイルされたdivを追加しようとしています。ルートdivはモーダルに含まれます(ただし、継承されます)が、モーダルが開いているときは子はありません。どのようにこの作品を作るためのアイデア?

HTML

<style> 
    #root { 
     background-color:orange; 
     height:20px; 
    } 
    </style> 
    <div the-modal control="modalCtl"> 
     Some transcluded content in the modal: 
     <input type="text" ng-model="input1" /> 
     <br> 
     You should see text in the orange rectangle: 
     <div id="root"></div> 
    </div> 

    <button type="button" ng-click="open()">Open me!</button> 

Javascriptを

var app = angular.module("app", ['ui.bootstrap']); 

app.controller("ctl", function($scope, $compile) { 

    $scope.modalCtl = {}; 

    $scope.input1 = "abc"; 

    $scope.open = function() { 
    $scope.modalCtl.openModal(); 

    // add compiled content 
    var root = angular.element('#root'); 
    var node = angular.element('<div><b>This is the node</b></div>'); 
    var content = $compile(node)($scope); 
    root.append(content); 
    }; 
}); 


app.directive("theModal", function($uibModal, $timeout) { 
    return { 
    restrict: "AE", 
    scope: { 
     control: "=" 
    }, 
    transclude: true, 
    link: function(scope, element, attrs, ctrl, transclude) { 

     scope.control = scope.control || {} 

     scope.control.openModal = function() { 
     scope.instance = $uibModal.open({ 
      animation: false, 
      scope: scope, 
      template: '<div class="content"></div>', 
      appendTo: element 
     }); 
     $timeout(function(){ 
      transclude(scope.$parent, function(clonedContent){ 
      element.find('.content').append(clonedContent); 
      }) 
     }) 
     }; 

    } 
    } 
}); 

答えて

1

あなたはモーダルそうangular.element('#root')は何を取得し、準備ができていないです<div id=#root'></div>にコンパイル要素を追加しようとすると問題があります。あなたがする必要があるのは、追加と継承の順序を切り替えることです。

実例: http://plnkr.co/edit/T5gpxYlvsxI5IY4zxR3E?p=info

関連する問題