$sce.trustAsHtml
ボタン (他の多くの要素と同様) は信頼できる要素ではないため、追加する必要があります。Angular はそれなしでバインドできます。
JSFiddle
angular.module('myApp', [])
.controller('dummy', ['$scope', '$sce', function ($scope, $sce) {
$scope.data = $sce.trustAsHtml('<button type="button" class="btn btn-primary">a new button!</button>');
}]);
ng-bind-html 内で Angular 関数を使用する必要がある場合は、次のようなディレクティブが必要です ( credits ):
.directive('compileTemplate', function($compile, $parse){
return {
link: function(scope, element, attr){
var parsed = $parse(attr.ngBindHtml);
function getStringValue() { return (parsed(scope) || '').toString(); }
//Recompile if the template changes
scope.$watch(getStringValue, function() {
$compile(element, null, -9999)(scope); //The -9999 makes it skip directives so that we do not recompile ourselves
});
}
}
});
HTML:
<div ng-bind-html="data" compile-template></div>
を使用$compile
すると、ビューに直接記述された HTML として使用される文字列をコンパイルするように指示できます。