У меня есть сценарий, в котором функция link
директивы вызывается с пустым параметром element
, что приводит к ошибкам.
Пример кода лучше всего описывает сценарий:
индекс.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
в outer
выше):
<div ng-switch on="show">
<div ng-switch-when="true">
<div inner>showing it</div>
</div>
</div>
При загрузке index.html в Chrome консоль сообщает об ошибке: «Ошибка типа: невозможно прочитать свойство 'offsetTop' of undefined» — потому что element
— это пустой массив!
Некоторые примечания:
replace
должно быть установлено значение true в директивеouter
.templateUrl
должен использоваться директивойouter
для загрузки своего частичного файла.
Я не уверен, пропустил ли я какое-то требование к конфигурации или это проблема Angular. Это верный сценарий? Если это так, то проблема в ng-switch или в Angular есть более глубокая проблема?
if(element.length)
работает plnkr.co/edit/sxfHOarFr5OcFMIt3dRj - person charlietfl   schedule 03.04.2013link
директивы - это правильно? Ре. охранник, см. мой ответ @arun-p-johny ниже. - person Paul Pepper   schedule 03.04.2013element.somePlugin()
пуст. - person charlietfl   schedule 03.04.2013outer''s
link`, кажется странным — 1-й без действительного параметраelement
, 2-й с допустимым параметромelement
. Отсутствие ng-switch дает ожидаемый результат одного вызоваlink
(см. plnkr.co/fV2yq1wy8jignNmfgp8Y). - person Paul Pepper   schedule 04.04.2013