为什么$ rootScope的属性未定义?

时间:2017-11-06 05:53:37

标签: javascript angularjs angularjs-scope mean-stack rootscope

我有一个角度应用程序,它实现工厂函数来处理几乎所有控制器中实现的全局对象的一些API请求。

factory.loadCart = function() {
        var deferred;
        deferred = $q.defer();

        httpService.get({
            service: 'cocacola',
            param1: 'userCart',
            guid: sessionStorage.token
        }, function(r) {
            if (r.error == 0) {
                $rootScope.user.cart = r.result;
                deferred.resolve(r.result);
            } else {
                deferred.reject("Error al cargar el carrito.")
            }
        }, function(errorResult) {
            deferred.reject(errorResult);
        });

        return deferred.promise;
    }

在代码中,我将user.cart属性的值设置为请求的结果。当我去另一个也实现这种工厂方法的控制器时(以这种方式)......

CartFactory.loadCart().then(function(response) {
            $rootScope.user.cart = response;
            $scope.cart = $rootScope.user.cart;
            if ($rootScope.user.cart.productos.length == 0) {
                $state.go('main.tienda');
            } else {
                getCards();
                $rootScope.showCart = false;
            }
        }, function(error) {
            $scope.loading = false;
            $scope.showMe = false;
            $state.go('main.tienda');
            console.log(error);
        });

...并返回第一个控制器,user.cart属性未定义,我无法继续执行定义为工厂方法的其他函数,因为$ rootScope.user.cart属性是undefined并且需要作为这些其他函数的参数。此外,$ rootScope.user.cart属性在刷新浏览器后获取其值(但我不能将其作为解决方案),我对Angular很新,所以任何帮助都会非常感激,这让我疯了!

2 个答案:

答案 0 :(得分:0)

我总是发现$ rootScope有点难以使用,而AngularJS中的反模式......就像把变量放在vanilla JS的全局范围内一样。

有没有理由你不能避免整个$ rootScope.user.cart问题,只需将购物车保存在CartFactory中,然后将一个API放入CartFactory中,然后将任何购物车返回给任何感兴趣的控制器?

答案 1 :(得分:0)

您设置用户' $ rootScope上的属性?你能不能把整个代码放在从对象读取嵌套属性之前,检查undefined,在你的情况下把if($ rootScope.user){//你的逻辑}