2016-04-15 3 views
0

私は、次のメソッドを介して実行されるいくつかの任意のJavaScriptコードがあります。AngularJS内の評価されたJavaScriptをどのようにデバッグできますか?

  1. javascriptのeval関数にコード列を結果としてAJAX呼び出し
  2. パスを介してクライアントのブラウザにそれをダウンロードします。

注:私は/ダウンロードコードが特定の範囲内で実行する必要があるため<script>さんにsrcプロパティをそのファイルのURLを追加することで、コードを実行することはできません。

Google Chromeでこのコードをデバッグします。 AngularJSを使用しているときではなく、プレーンなJavascriptを使用してこれを行うことができます。これをどうすれば解決できますか?

例1(プレーンJS、私はcode.jsを検査するためのオプションを与えています):

var codeToRun = "" 
+"var a = 1;\n" 
+"var b = 2;\n" 
+"This line will fail\n" 
+"//@ sourceURL=code.js"; 

eval(codeToRun); 

結果:http://i.imgur.com/3LL9xi7.png
デモ:https://jsfiddle.net/AlexLeung/mpjrwmbm/

例2(AngularJS、私は検査するオプションが与えられていないですcode.js):

var codeToRun = "" 
+"var a = 1;\n" 
+"var b = 2;\n" 
+"This line will fail\n" 
+"//@ sourceURL=code.js"; 

angular.module("myApp", []) 
.controller("myController", function($scope) { 
    eval(codeToRun); 
}); 

結果:http://i.imgur.com/x7lZcUf.png
デモ:http://jsfiddle.net/oeoaep0o/

+0

多分、https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$evalを試してください。 – dandavis

+0

正直言って、もし私があなただったら、私はデザインを変更するつもりです。なぜ特定の範囲で実行する必要がありますか?そうでないようにしてください。 – Casey

+0

あなたはあなたのコントローラで呼び出すグローバル関数を持っていて、スコープから必要なものを引数として渡すことができます。 – Casey

答えて

0

無名関数ではなく名前付き関数を使用してください。例えば:

var codeToRun = "var a = 1; console.log(a) //@ sourceURL=foo.js"; 
 

 
function evaler() 
 
    { 
 
    eval(codeToRun); 
 
    } 
 

 
angular.module("foo", []).run(evaler);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="foo"></div>

参照

関連する問題