2017-05-02 14 views
0

私は角度を使用していますが、私の指示文のテンプレートにスクリプトを追加したいと思います。スクリプトが必要とするパラメータを受け入れ、それを文字列として返す関数を書くことで、これを達成したいと考えています。私はこのようにして、長いJavaScriptファイルを文字列として書く必要はありません。JavaScriptを文字列として返す関数を書く方法

私は次のディレクティブがあります。

ディレクティブ

function barchart() { 
     return { 
      restrict: 'EA', 
      replace: true, 
      template: ` 
        <div id="canvas" class ="panel-body container-fluid"> 
        <div class ="ui centered grid"> 
         <div> 
          <div id="title"></div> 
          <div id="chart"></div> 
         </div> 
        </div> 
        </div> 
       `, 
      scope: { 
       revenues: "=revenues" 
      }, 
      link: function ($scope, $element, $attrs) { 
       $scope.$watch('revenues', function (rev) { 

        if (typeof rev != 'undefined') { 
         $element.append(`<script> (render(${rev}))(); </script>`); 
        } 
       }); 
      } 
     } 
    } 

を私はこれらの線の周りに何かをしたいが、それは

(スクリプトを返すべき関数)をレンダリング動作しない

function render(params){ 
    return (function(){ 
      $('#chart').append('<p> params </p>'); 
      })(); 
} 

エラー

rev is not defined 
+0

'$ {レンダリング(REV)は}' – guest271314

+2

ところで... 'render'は、あなたがきたスニペットでスクリプトを返しません。提供されます。 IIFEを実行する未定義の戻り値を返します。 –

+0

@KevinBこれは私がする方法を学びたいものです。私が持っているのは、関数とそのパラメータからスクリプトを作成する何かをしようとする試みです。どうすればいい? –

答えて

0

サラウンドrender()コール${と、}

$element.append(`<script>${render(rev)}</script>`); 
+0

私はまだ 'rev is not defined'を取得します。私はその行の前にconsole.logged revを持っていて、revにはそれがあると期待されるデータがあります –

+0

実証するためにplnkr https://plnkr.coを作成できますか?注 'render'は' render'関数内でIIFEから値が返されないので 'undefined'を返します。 '

params

'は '#chart'要素に追加されていますか?期待される結果は何ですか? – guest271314

+0

このようなものhttps://plnkr.co/edit/4brDVy3rJk5yJVTMadJV?p=preview私の最終的な$ watchはうまく動作しますが、このplunkerではそれはありません –

関連する問題