Почему $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;
Я предпочитаю эту опцию, потому что вы можете легко смоделировать этот объект в модульных тестах, и ваш код легче понять.