角度工厂局部变量

时间:2014-09-10 23:13:43

标签: angularjs

这个问题可能与我没有把握角度的工厂概念有关,我有以下工厂:

.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对象中的一个字段,但不是这种情况,但是如何返回局部变量。

3 个答案:

答案 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;