2017-03-28 30 views
0

角度では、入力された住所に基づいて地図を動的に作成したい。私はVueJSでこれを成功させました。しかし、これは角度で、セキュリティの警告を引き起こします。動的に作成されたマップトリガ警告が角度で表示される

HTML:

<iframe 
    ng-src="https://maps.google.com/maps?&amp;q={{encodeURIComponent(item.address)}}&amp;output=embed" 
    allowfullscreen> 
</iframe> 

私は次のように作成しようとした:

app.filter('trustAsResourceUrl', ['$sce', function ($sce) { 
    return function (val) { 
     return $sce.trustAsResourceUrl(val); 
}; 

はその後ように、それをパイプ:

すでに確立されているURLを使用しますがいない場合は動作します
| trustAsResourceUrl}} 

私はアドレスからURLを形成しようとしているからです。

Error: [$interpolate:noconcat] Error while interpolating: Strict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required. See http://docs.angularjs.org/api/ng.$sce

VueJSはとてもシンプルでしたが、このプロジェクトでは使用できません。

methods: { 
    getmap: function(){ 
     setTimeout(function() { 
      const searchInput = document.getElementById('searchTextField'); 
      let addr = searchInput.value; 
      let embed = "<div class='form-group'><label for='exampleInputPassword1'>Map Preview</label><iframe frameborder = '0' scrolling= 'no' marginheight= '0' marginwidth= '0' src= 'https://maps.google.com/maps?&amp;q=" + encodeURIComponent(addr) + "&amp;output=embed' > </iframe></div>"; 

     $('.place').html(embed); }, 200) 
    }, 

答えて

0

本質的にこのフィルタは使用できません。

this.src = $sce.trustAsResourceUrl("https://maps.google.com/maps?q=" 
    + encodeURIComponent(item.address) + "&output=embed"); 

が続い <iframe ng-src="{{$ctrl.src}}">

はあなただけitem.addressではなく、全体srcを更新する必要があります:あなたはスコープ上で直接使用したい文字列を作成する必要があります。

+0

これは技術的に私の質問に答えるので、私は答えとして受け入れます。ありがとうございました!しかし、私の設定に実装するのが少し難しいようです。そのURL構造のセキュリティ例外を作成する方法はありますか?もしそうなら、私はそれをもっと簡単に保つことができました。 – Auzy

+1

詳細については、http://docs.angularjs.org/api/ng.$sceのドキュメントを参照してください。はるかに優れた選択肢があるかどうかはわかりません。 –

+0

あなたは正しいと思います。助けてくれてありがとう! – Auzy

関連する問題