このフィドルをチェックしてください:http://jsfiddle.net/z9XK3/6/
<div ng-app="miniapp">
<div ng-controller="Ctrl">
<span ng-bind-html-unsafe="variable"></span>
<span ng-bind-html-unsafe="variableB"></span>
<span class="clone">Clone me Clone me</span>
</div>
</div>
<div class="destination"></div>
var $scope;
var app = angular.module('miniapp', []);
function Ctrl($scope) {
$scope.variable = $('<span>100</span>');
$scope.variableB = 'String';
}
app.directive('clone', ['$compile', function($compile) {
return {
restrict: 'C',
link: function(scope, element, attrs) {
element.bind('click', function(){
var newTemplate = '<span ng-bind-html-unsafe="variable"></span><span ng-bind-html-unsafe="variableB"></span> ';
var compiledOutput = $compile(newTemplate)(scope);
scope.$apply();
compiledOutput.prependTo($('.destination'));
});
}
};
}]);
「Clone me Clone me link」をクリックしてみてください
元のテンプレートで<span>100</span>
は、文字列 'String' は引き続き表示されるのに対し、オブジェクトであるため が表示されないことに注意してください。
なぜこうなった?さらに、「Clone me Clone me」リンクをクリックするとオリジナル<span>100</span>
が消えないようにするにはどうすればよいですか?
(注:これは私が直面している実際の問題を単純化したものです。この場合<div ng-controller="Ctrl"></div>
、newTemplate変数をラップすることでこれを解決できます。しかし、私が直面している実際の問題では、ng-controller divを追加しても解決されません問題があるので、新しい洞察を教えてください)