这个问题可能与我没有把握角度的工厂概念有关,我有以下工厂:
.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 不是持久性的,当我尝试从控制器访问工厂 cart 总是未定义的。我知道 this.cart 是指util对象中的一个字段,但不是这种情况,但是如何返回局部变量。
答案 0 :(得分:4)
这是' this
'的概念问题。在Javascript中以及它是如何工作的。当您调用getCart
时,'这个'指的是调用函数的对象,所以在你的情况下' this
'应该引用utils
对象,因为cart
在该对象上不存在,所以它未定义。
在getCart
中更改您的回报,只需返回&{39; cart
'因为那将返回在函数工厂内定义的私有变量cart
。
关于这个问题的一些好的阅读:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
答案 1 :(得分:2)
无需在代码块中使用'this'关键字
utils.getCart = function() {
return cart;
};
答案 2 :(得分:0)
getCart()方法在这里会有自己的范围,所以'这个'关键字将引用getCart()函数范围内的局部变量。 要返回购物车,请定义父范围指针:var parent = this; (指向工厂范围内)作为utils的兄弟 然后在函数getCart()中,返回如下:return parent.cart;