2016-01-11 3 views
0
<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 раза, я ожидал один раз

ответ

2

element.has(element.has(g));

вот два ваших звонков. Я не уверен, что вы ожидали, но оба вызова возвращают undefined, потому что они проходят тест ! this.length || typeof this === 'undefined' (где this ссылается на ваш элемент cacat, который имеет ненулевую длину), и нет возврата за эту точку, поэтому неявный undefined возвращаемое значение.

+0

Я не думаю, что второе утверждение верно, оно не возвращает 'false', как определено. 'Console.log' будет запускаться из-за'! this.length' – Dieterg

+0

Я ЕСМЬ непреднамеренно – user3032469

0

Вы вызываете метод дважды:

element.has(element.has(g)); 

Поскольку .has() не возвращает значение при вызове с действительным элементом, вы получаете undefined во втором вызове.

Смежные вопросы