Я использую $ rootScope.requestObj для хранения объекта ключа: значения, которые представляют определенные фильтры.
В течение всего моего приложения $ rootScope.requestObj обрабатывается синглтон, и его поведение соответствует ожидаемому.
Однако при обращении к внешнему API я создал службу, которая получила параметр $ rootScope.requestObj в качестве параметра.
Вот мой код:
function requestHandler(obj /*In my controller I am passing $rootScope.requestObj*/) {
var internal_object = obj;
console.log('BEFORE FILTER = ', JSON.stringify($rootScope.requestObj));
Object.keys(internal_object).forEach(function (key) {
if (key != 'limit' && key != 'offset' && key != 'cities') {
internal_object[key] = null;
} else {
if (key == 'limit') {
internal_object[key] = REQUEST_LIMIT.simplyRETS; //outputs 500 that is simplyRETS limit for a request.
}
}
});
console.log('AFTER FILTER = ', JSON.stringify($rootScope.requestObj));
//Rest of the code, I basically serialize the internal_object and send it
//as params of a $http.get request.
Как вы можете видеть, я передаю $ rootScope.requestObj к моему internal_object я итерация по внутреннему объекту, никогда не изменяя фактический $ rootScope.requestObj. Тем не менее первый console.log выводит это:
Обратите внимание на значение «maxprice».
BEFORE FILTER = {"type":null,"minprice":null,"maxprice":2,"minbeds":null,"maxbeds":null,"minbaths":null,"maxbaths":null,"minarea":null,"maxarea":null,"limit":500,"offset":0,"cities":"Aventura","q":null}
Второе это =
AFTER FILTER = {"type":null,"minprice":null,"maxprice":null,"minbeds":null,"maxbeds":null,"minbaths":null,"maxbaths":null,"minarea":null,"maxarea":null,"limit":500,"offset":0,"cities":"Aventura","q":null}
Как-то в этой маленькой итерации, где я удалить все из INTERNAL_OBJECT, не ограничивает смещение или город, мои $ изменений rootScope.requestObj и выводит различное значение.
Здесь я просто тестирую с maxprice для простоты. Я использую JSON.stringify()
, чтобы получить отметку стоимости объекта на данный момент.
Я верю, что по-прежнему существует связь между моим внутренним объектом и объектом $ rootScope.requestObj. Однако, не уверен, почему и как его избежать.
Редактировать
Источником моего замешательства было то, что я предполагал, вар internal_object создавал новое пространство в памяти. Хотя, как объяснялось, это создавало ссылку.
Я просто не могу поверить, как что-то так просто меня достало. Благодаря! –