2016-02-11 13 views
13

application/ld+jsonscriptタグを、AngularJSで動的に作成されたJSONオブジェクトで作成するにはどうすればよいですか。 AngularJSスクリプトタグJSON-LD

この

は私が次のコードを試してみました

<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", 
    "@type": "Place", 
    "geo": { 
     "@type": "GeoCoordinates", 
     "latitude": "40.75", 
     "longitude": "73.98" 
    }, 
    "name": "Empire State Building" 
    }; 
}]); 

scriptタグ内の式は実行されません。 スクリプトタグ外の表現が正しく実行され、JSON

私はtrustAsHtml機能付き$sceサービスがあります覚えてコーヒーカップ後jsfiddle

+0

をどのように伝えることができますか?それはちょうどanonオブジェクトです... – dandavis

+0

@dandavis 'json'はJSONオブジェクトを出力するフィルターです。ソースを表示すると、スクリプトタグの間にJSONオブジェクトはありません。 –

答えて

16

を参照してくださいが表示されます。

HTML

<div ng-controller="TestController"> 
    <jsonld data-json="jsonId"></jsonld> 
</div> 

Javascriptを

var myApp = angular.module('application', []); 

myApp.controller('TestController', ['$scope', function($scope) { 
    $scope.jsonId = { 
    "@context": "http://schema.org", 
    "@type": "Place", 
    "geo": { 
     "@type": "GeoCoordinates", 
     "latitude": "40.75", 
     "longitude": "73.98" 
    }, 
    "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 
    }; 
}]); 

は私が

更新され、以下の作業のコードを参照してくださいを簡単に再利用のためのjsonパラメータを受け入れるディレクティブを作成しましたここにスクリプト出力の画像があります

更新jsfiddle

enter image description here

+1

どのようにAngularjs 2で同じことを達成できるのですか? –

+0

@ArvindChavhanスクリプトタグがangle2で削除されたようですが、テンプレートHTMLの中にある場合は、ここに問題に関する質問があります.http://stackoverflow.com/questions/38088996/additional-script-tags-in-angular2-component-templateを参照してください。ここにバグ/機能リクエストのリンクがあります。https://github.com/angular/angular/issues/9695 –

1

Tjaartのファンデウォルトの答えはGoogle Test Toolに私のために動作しませんでした参照してください。それは実際のクローラで動作しました。 だから私はトリックをした別の「古い学校」解決策が見つかりました:それは実行されるかどう

HTML

<script type="application/ld+json" id="json-ld-music-group"></script> 

角度

var schemaOrg = angular.toJson({ 
    '@context': 'http://schema.org', 
    '@type': 'MusicGroup', 
    ... 
}); 

angular.element(document).ready(function() { 
    var jsonLd = angular.element(document.getElementById('json-ld-music-group'))[0]; 
    jsonLd.innerHTML = schemaOrg; 
}); 
+0

私はこの解決法を "あなたが言ったように、「本当のケースのシナリオ」。次のリンクhttps://search.google.com/structured-data/testing-tool#url=https%3A%2F%2Fjsfiddleをクリックしてください。net%2Fvqz31net%2F1%2Fこれは私の答えにjsfiddleの例でgoogles構造データテストツールを起動します。右側に「場所が検出されました」と表示されます。 jsfiddlesウェブサイトのデータであり、jsfiddleの例ではないので、エラーを無視してください。あなたはローカルホストのウェブサイトを試してみてはいけないと確信していますか? –

+0

あなたは正しいです。それは結局働いた。 Googleは5日間の処理を遅らせていました。私のためにGoogle Testツールでは機能しませんでした。私は以前のコメントを編集しました。 – Karens

関連する問題