AngularJS : 控制器之间的数据服务

AngularJS : Service for data between controllers

我有一个页面,其中包含一个主控制器和一个用于显示产品详细信息的嵌套控制器。我想使用 angular 中的服务来调用服务器、检索数据对象并保存该数据对象。主控制器将调用服务来获取数据,详细信息控制器需要知道它已更新,然后访问数据。我的服务如下所示:

.service("productService", function ($http, $q) {
    var product = {};
    //interface that is returned
    return ({
        fetchProduct: fetchProduct,
        clearProduct: clearProduct,
        product: product
    });

    function fetchProduct(ID) {
        var request = $http({
            method: "get",
            url: "/online/productdata.ashx?itemID=" + ID,
            params: {
                action: "get"
            }
        });

        return (request.then(handleSuccess, handleError));
    };

    function clearProduct() {
        product = {};
    };

    // Transform the error response, unwrapping the application dta from
    // the API response payload.
    function handleError(response) {

        // The API response from the server should be returned in a
        // nomralized format. However, if the request was not handled by the
        // server (or what not handles properly - ex. server error), then we
        // may have to normalize it on our end, as best we can.
        if (
            !angular.isObject(response.data) ||
            !response.data.message
            ) {
            return ($q.reject("An unknown error occurred."));
        }
        // Otherwise, use expected error message.
        return ($q.reject(response.data.message));
    };

    // I attempt to transform the successful response and unwrap the application data
    // from the API response payload.
    function handleSuccess(response) {
        product = response.data;
        console.log("Found Data: " + angular.toJson(response.data))
        return (response.data);
    };
})

在我的主控制器中,我为服务设置了一个范围对象,如下所示: $scope.SelectedProduct = 产品服务;

当用户点击按钮显示产品时,它通过 $scope 句柄调用: $scope.SelectedProduct.fetchProduct(ID);

详细信息控制器对 $scope.SelectedProduct 具有相同的分配。我是使用服务的新手,但据我了解,angular 会绑定到服务对象,对 属性 产品的更改会触发绑定到任何更新。这并没有发生——事实上我确实在获取操作后看到了数据。在服务中,我在返回的数据上有一个 console.log,它显示了正确的数据。但是,产品 属性 没有得到更新。有人可以告诉我我做错了什么吗?获取数据后,两个控制器都无法访问数据。我知道我正在收回承诺,但即使在超时检查后数据也永远不会存在。

尝试使用工厂而不是服务。

AngularJS: Factory vs Service vs Provider