Почему $document.referrer в угловых js возвращается пустым. Но когда я использую document.referrer, он возвращает мне значение

var referrer = $document.referrer;

Нужна ценность

$document.referrer 

в переменной.

1 ответ

$document на самом деле является результатом запроса jqLite/jQuery, так что свойство не существует. Если вы хотите получить реферера, вы можете:

а) Получите прямой доступ к документу DOM:

var referrer = document.referrer; 

Это не рекомендуется, так как у вас могут возникнуть проблемы при написании юнит-тестов.

б) Ссылка на объект внутри результата запроса jqLite/jQuery:

var referrer = $document[0].referrer;

Лично мне этот подход тоже не нравится, код становится уродливым и вводящим в заблуждение.

в) Украсить документом:

myApp.config(function($provide){
  $provide.decorator('$document', function($delegate){

    $delegate.getReferrer = function() {return document.referrer;};

    // alternative you can create a property
    // Object.defineProperty($delegate, 'referrer', {  
    //   get: function() { return document.referrer; }
    // });

    return $delegate; 
  });
});

а затем получить реферер:

var referrer = $document.getReferrer();
//Or if you created a property...
//var referrer = $document.referrer;

Я предпочитаю эту опцию, потому что вы можете легко смоделировать этот объект в модульных тестах, и ваш код легче понять.

Другие вопросы по тегам