如何在AngularJS中使用动态构建的
JSON对象创建一个application / ld json脚本标记.
这就是我需要脚本标签的样子
<script type="application/ld+json">
{
"@context": "http://schema.org","@type": "Place","geo": {
"@type": "GeoCoordinates","latitude": "40.75","longitude": "73.98"
},"name": "Empire State Building"
}
</script>
我已经尝试了以下代码,但我不能让它工作:
HTML
<div ng-controller="TestController">
<script type="application/ld+json">
{{jsonId|json}}
</script>
{{jsonId|json}}
</div>
调节器
var myApp = angular.module('application',[]);
myApp.controller('TestController',['$scope',function($scope) {
$scope.jsonId = {
"@context": "http://schema.org","geo": {
"@type": "GeoCoordinates","longitude": "73.98"
},"name": "Empire State Building"
};
}]);
脚本标签中的表达式不执行.
脚本标签之外的表达式正确执行并显示JSON
请参阅jsfiddle
解决方法
一杯咖啡后,我记得有一个$sce服务与一个trustAsHtml功能.
我创建了一个接受json参数以便于重用的指令
请参阅以下更新和工作代码:
HTML
<div ng-controller="TestController"> <jsonld data-json="jsonId"></jsonld> </div>
使用Javascript
var myApp = angular.module('application',"name": "Empire State Building"
};
}]).directive('jsonld',['$filter','$sce',function($filter,$sce) {
return {
restrict: 'E',template: function() {
return '<script type="application/ld+json" ng-bind-html="onGetJson()"></script>';
},scope: {
json: '=json'
},link: function(scope,element,attrs) {
scope.onGetJson = function() {
return $sce.trustAsHtml($filter('json')(scope.json));
}
},replace: true
};
}]);
这是脚本输出的映像
请看更新jsfiddle