Angular.jsのインラインテンプレートを試しています。 HTMLページがレンダリングされるたびにコンソールに印刷することにより、Angularオブジェクトをデバッグする方法が必要です。
Inline-templateは、htmlテンプレートをscriptタグ内に配置します。例えば:
_<script type="text/ng-template" id="/htmlpage.html">
<div class="page-header">
<h1>Title</h1>
</div>
<!-- everything else here is html too -->
</script>
_
スクリプトタグ内のものは実際にはJavaScriptではないため、注意が必要です。 つまり、インラインテンプレートを使用してhtmlpage.html内のコンソールに印刷する方法がわかりません。
私は試しましたが、スクリプトタグのネストに失敗しました:
_<script type="text/ng-template" id="/htmlpage.html">
<!-- html page template Angular stuff before is okay -->
<script>console.log("this line DOESN'T SHOW UP anywhere");</script>
<!-- html page template Angular stuff AFTERWARDS ALL FAIL-->
</script>
_
また、スクリプトタグ内にあるため、bares.console.logのみをスローしようとしました。
_<script type="text/ng-template" id="/htmlpage.html">
<!-- rest of html page template is okay -->
console.log("this entire line gets output as text on the html page");
<!-- rest of html page template is okay -->
</script>
_
しかし、行全体console.log("this entire line gets output as text on the html page");
は、コンソールではなくhtmlページに出力されます!
これを実現するには、テンプレート定義でng-init
を使用してコントローラースコープで定義されたデバッグ関数を呼び出します。 この例 を参照してください。
テンプレートが定義されているとしましょう
<script type="text/ng-template" id="myTemplate.html">
<div ng-init="log('In template: '+$index)">{{greet}} Melissa<div>
</script>
コントローラーが次のように定義されています
var app = angular.module('myApp', [])
.controller('myController', ['$scope', '$log', function($scope, $log) {
$scope.greetings = ["Hello", "Bonjour", "Guten tag"];
$scope.log = function(message) {
$log.debug(message);
}
}]);
それから
<ul ng-controller="myController">
<li ng-repeat="greet in greetings">
<div ng-include src="'myTemplate.html'"></div>
</li>
</ul>
コンソールに印刷する必要があります
テンプレート内:0
テンプレート内:1
テンプレート内:2
ng-init
は、テンプレートがインスタンス化されるたびに呼び出されます。 $index
ループのインデックスであるng-repeat
のように、スコープで使用可能な値をいくつか記録するだけです。
この例 を参照してください。
上記の答えを使用すると、次の方が簡単であることがわかりました。
私にとって最も簡単な解決策は、一時的にコントローラに_
$scope.console = console
_を設定し、テンプレートが_window.console
_バインディングを介して通常どおり_$scope
_グローバル変数とその関連関数にアクセスできるようにすることでした
テンプレートのスコープは厳密であるため、グローバル変数およびウィンドウ変数にアクセスできません。その結果、テンプレートからconsole.X()
を使用できません。そして、おそらくあなたが経験したように、テンプレート内から未定義の値を参照しようとしてもエラーにはなりませんでした...ただ何もしませんでした。 (イベントが発生しない理由を理解しようとして髪を引き裂くキュー)