これは私のテンプレートです:
<div class="span12">
<ng:view></ng:view>
</div>
これは私のビューテンプレートです:
<h1>{{stuff.title}}</h1>
{{stuff.content}}
as html を取得してcontent
いて、それをビューに表示したいのですが、取得しているのは生の html コードだけです。その HTML をレンダリングするにはどうすればよいですか?
これは私のテンプレートです:
<div class="span12">
<ng:view></ng:view>
</div>
これは私のビューテンプレートです:
<h1>{{stuff.title}}</h1>
{{stuff.content}}
as html を取得してcontent
いて、それをビューに表示したいのですが、取得しているのは生の html コードだけです。その HTML をレンダリングするにはどうすればよいですか?
使用する-
<span ng-bind-html="myContent"></span>
angular にエスケープしないように指示する必要があります。
これを行うには、カスタム フィルターを使用します。
私のアプリでは:
myApp.filter('rawHtml', ['$sce', function($sce){
return function(val) {
return $sce.trustAsHtml(val);
};
}]);
次に、ビューで:
<h1>{{ stuff.title}}</h1>
<div ng-bind-html="stuff.content | rawHtml"></div>
Angular のドキュメントに従い、$sce を使用する必要があります。$sce は、AngularJS に Strict Contextual Escaping サービスを提供するサービスです。ここにドキュメントがあります:http://docs-angularjs-org-dev.appspot.com/api/ng.directive:ngBindHtmlUnsafe
Eventbrite ログイン ボタンを非同期にロードする例を見てみましょう。
コントローラーで:
someAppControllers.controller('SomeCtrl', ['$scope', '$sce', 'eventbriteLogin',
function($scope, $sce, eventbriteLogin) {
eventbriteLogin.fetchButton(function(data){
$scope.buttonLogin = $sce.trustAsHtml(data);
});
}]);
ビューに次を追加するだけです:
<span ng-bind-html="buttonLogin"></span>
あなたのサービスで:
someAppServices.factory('eventbriteLogin', function($resource){
return {
fetchButton: function(callback){
Eventbrite.prototype.widget.login({'app_key': 'YOUR_API_KEY'}, function(widget_html){
callback(widget_html);
})
}
}
});
したがって、ライブラリ、スクリプトをロードし、ビューでアプリを初期化するために、これを index.html に入れたいと思うかもしれません:
<html>
<body ng-app="yourApp">
<div class="span12">
<div ng-view=""></div>
</div>
<script src="http://code.angularjs.org/1.2.0-rc.2/angular.js"></script>
<script src="script.js"></script>
</body>
</html>
次に、 yourView.html は次のようになります。
<div>
<h1>{{ stuff.h1 }}</h1>
<p>{{ stuff.content }}</p>
</div>
scripts.js は、コントローラーにデータ $scope'd を持たせることができます。
angular.module('yourApp')
.controller('YourCtrl', function ($scope) {
$scope.stuff = {
'h1':'Title',
'content':"A paragraph..."
};
});
最後に、ルートを構成し、コントローラーを割り当てて、その $scope (つまり、データ オブジェクト) を表示する必要があります。
angular.module('yourApp', [])
.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/yourView.html',
controller: 'YourCtrl'
});
});
私はこれをテストしていません。バグがある場合は申し訳ありませんが、これはAngularishのデータ取得方法だと思います