<h1>{{ revision.title }}</h1>
<div ng-bind-html="revision.content"></div>
タイトルは正常に出力されますが、コンテンツはそうではありません。それにはいくつかのhtmlがあり、次のエラーが表示されます:Attempting to use an unsafe value in a safe context.
これはそう記述されています: http://docs.angularjs.org/error/ $ sce:unsafeで問題ありませんが、HTMLが含まれているため、どのようにコンテンツを出力できますか。したがって、{{ revision.content | safe }}
またはsmthnに設定する必要があります。正しい方法は何ですか?
編集:
AngularJSバージョン:1.2
修正はこれです:
http://code.angularjs.org/ からangular-sanitize.min.js
をインクルードし、モジュールにインクルードします。
var app = angular.module('app', ['ngSanitize']);
ng-bind-html
を自由に使用できます
古い質問ですが、コントローラーで$sce
を使用して値を信頼することもできます。
$scope.revision.content = $sce.trustAsHtml($scope.revision.content);
その後、ng-bind-html
が機能します。
ng-html
と同じ基本的なことを行うng-bind-html-unsafe
ディレクティブを作成しました。ただし、使用には注意が必要です。悪意のある攻撃にあなたのサイトを簡単に開く可能性があります。実装する前に、何をしているのかを知ってください。
.directive('ngHtml', ['$compile', function($compile) {
return function(scope, elem, attrs) {
if(attrs.ngHtml){
elem.html(scope.$eval(attrs.ngHtml));
$compile(elem.contents())(scope);
}
scope.$watch(attrs.ngHtml, function(newValue, oldValue) {
if (newValue && newValue !== oldValue) {
elem.html(newValue);
$compile(elem.contents())(scope);
}
});
};
}]);
そして、次のように使用します。
<div ng-html="revision.content"></div>
お役に立てば幸いです。
どのバージョンを使用していますか? 1.2未満を使用している場合は、ngBindHtmlUnsafe
を試すことができます
ngBindHtml
についてのAngularJs公式ドキュメント に従って、アプリの依存関係にngSanitizeを挿入する必要があります
式を評価し、結果のHTMLを安全な方法で要素に挿入します。デフォルトでは、結果のHTMLコンテンツは$ sanitizeサービスを使用してサニタイズされます。この機能を利用するには、たとえば、モジュールの依存関係にコアのAngularではなくngSanitizeを含めることで、$ sanitizeが利用可能であることを確認してください。モジュールの依存関係でngSanitizeを使用するには、アプリケーションに「angular-sanitize.js」を含める必要があります。
その後、次の方法でngSanitize
モジュールをインストールできます。
1-bowerを使用
bower install --save angular-sanitize
2-npmを使用
npm install --save angular-sanitize
3-ダウンロードにより手動でangular-sanitize.js
file from code.angularjs.orgバージョン番号別のすべてのangleJsファイルカテゴリを含むパス like @ Xeen answer
angular-sanitizeのインストール用のAngularJsの公式githubリポジトリ からngSanitize
モジュールのインストールの詳細を参照してください。