18

いくつかの関数で「sharedData」と呼ばれるサービスがありますが、これらの関数の 1 つを別のそのような関数から呼び出す方法を教えてください。ここにコード(「???????」でマークされたトラブル機能):ありがとう

service('sharedData', function ($http) {
    var refillList = [];
    var orderCart = {
        orderPlace: null,
        orderList: [],
        totalSum: 0
    };

    return {
        ....
        addRefill: function(value) {
           ...here some logic....
        },

        addOrder: function(order) {
            ...here some logic....
        },
        sendOrder: function(order, refill) {
            $http.get(config.urls.ajaxOrder + "{\"order\":{\"table_id\":" + orderCart.orderPlace + ",\"item_id\":" + order.id + ",\"amount\":1,\"action\":1}}").success(function(dataDetails) {
                if (dataDetails.success) {
                    if (refill == 1) {
                        // Filling refill list
                        ??????????????????this.addRefill(order);?????????
                    }
                    // Filling order cart
                    ?????????this.addOrder(order);?????????????
                }
            });
        }
    };
}).
4

2 に答える 2

3

問題は、このコールバック関数の this が、この場合 $http であるコールバックの親コンテナーを参照することです。やりたいことは、コールバックの外で親オブジェクトのインスタンスを作成し、それをコールバック内から参照することです。

何かのようなもの:

....
{
    ....
    addRefill: function(value) {
       ...here some logic....
    },

    addOrder: function(order) {
        ...here some logic....
    },
    sendOrder: function(order, refill) {
        var rootObj = this;
        $http.get(config.urls.ajaxOrder + "{\"order\":{\"table_id\":" + orderCart.orderPlace + ",\"item_id\":" + order.id + ",\"amount\":1,\"action\":1}}").success(function(dataDetails) {
            if (dataDetails.success) {
                if (refill == 1) {
                    // Filling refill list
                    rootObj.addRefill(order);
                }
                // Filling order cart
                rootObj.addOrder(order);
            }
        });
    }
};
....

もちろん、これは単なる解決策ですが、覚えておくべき主な概念は、関数がオブジェクトからではなく、成功の約束から呼び出されているということです。

于 2013-05-30T14:34:01.193 に答える