ディレクティブのlink
関数が空のelement
パラメーターで呼び出されてエラーが発生するシナリオがあります。
コード例は、シナリオを最もよく説明しています。
index.html:
<html ng-app="app">
<body>
<div outer></div>
</body>
</html>
スクリプト:
var app = angular.module('app', []);
app.directive('outer', function() {
return {
replace: true,
controller: function($scope) {
$scope.show = true;
},
templateUrl: 'partial.html'
};
});
app.directive('inner', function($window) {
return {
link: function(scope, element, attrs) {
console.log('element: ' + element);
var top = element[0].offsetTop;
}
};
});
partial.html (上記のtemplateUrl
onouter
で参照):
<div ng-switch on="show">
<div ng-switch-when="true">
<div inner>showing it</div>
</div>
</div>
Chrome で index.html をロードすると、コンソールに「TypeError: 未定義のプロパティ 'offsetTop' を読み取れません」というエラーが報告されますelement
。
いくつかのメモ:
replace
ディレクティブで true に設定する必要がありますouter
。templateUrl
outer
パーシャルをロードするには、ディレクティブで使用する必要があります。
構成要件を見落としているのか、それとも Angular の問題なのかはわかりません。これは有効なシナリオですか? もしそうなら、それは ng-switch の問題ですか、それとも Angular 内により深い問題がありますか?