2014-09-10 2 views
0

Этот вопрос, вероятно, что-то делать со мной не захватывая концепцию фабрики в угловатые, я следующий завод:Угловая Фабричные Локальные переменные

.factory('utils', ['api', '$log', '$q', 
    function(api, $log, $q) { 

    var utils = {}; 
    var cart = { 
     products: new Array(), 
     payment: 'cash' 
    }; 


    /** 
    * Access the shopping cart 
    */ 
    utils.getCart = function() { 
     return this.cart; 

    }; 


    return utils; 

} 
]); 

Проблема заключается в том, что локальная переменная корзина не является постоянным , когда я пытаюсь получить доступ к фабрике с контроллера cart всегда не определено. Я понимаю, что this.cart ссылается на поле в объекте util, но это не так, но как я могу вернуть локальную переменную.

+0

'возврата телегу,' должны это сделать. –

+0

@MattWay Я делаю именно это, и он все еще не работает! – Willa

ответ

2

Нет необходимости использовать 'это' ключевое слово в вашем блоке кода

utils.getCart = function() { 
    return cart; 
}; 
0

Метод getCart() здесь получит свою собственную область видимости, поэтому ключевое слово this будет ссылаться на локальную переменную в рамках функции getCart(). Чтобы вернуть корзину, укажите указатель на родительский указатель: var parent = this; (чтобы указать на область внутри фабрики) в качестве брата для utils , а затем в функции getCart(), вернемся так: return parent.cart;

4

Это вопрос концепции «this» в Javascript и как это работает. Когда вы вызываете getCart, «это» относится к объекту, на который была вызвана функция, поэтому в вашем случае «this» должен ссылаться на объект utils, а так как cart не существует на этом объекте, его не определено.

Изменить возврат в getCart, чтобы просто вернуть 'cart', так как это вернет личную переменную cart, определенную внутри фабрики функций.

Некоторые хорошее чтение по теме:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this

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