<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<script>
var app = angular.module( "test", [] );
app.run(function () {
angular.element.prototype.has = function(selector) {
if ( ! this.length || typeof this === 'undefined' ) return false;
console.log ( selector );
};
});
app.directive('cacat', function() {
return {
restrict: 'E',
link: function (scope, element, attrs) {
var g = element[0].querySelector('span');
if ( angular.element(g).length ) {
element.has(element.has(g) );
}
}
};
});
</script>
</head>
<body ng-app="test">
<cacat>
<span>da</span>
</cacat>
</body>
</html>
为什么.has被叫2次?第一次我得到一个好的元素,第二次得到一个未定义的元素,并且它通过了条件。
答案 0 :(得分:2)
element.has(element.has(g) );
这是你的两个电话。我不确定您的预期,但两次调用都会返回undefined
,因为它们会通过! this.length || typeof this === 'undefined'
测试(其中this
指向您的cacat
元素,该元素具有非-zero length),除此之外没有返回,因此是一个隐含的undefined
返回值。
答案 1 :(得分:0)
您正在调用该方法两次:
element.has(element.has(g));
由于.has()
在使用有效元素调用时未返回值,因此您在第二次调用中获得undefined
。