angularjs之如何在两个 Controller 之间共享ajax返回的数据

lhb25 阅读:15 2024-09-07 23:24:14 评论:0

您好,我有两个 Controller ,其中一个我定义了一些函数来获取数据,我将数据存储在 $scope.data1 中,现在我想在另一个命名的 Controller 中访问此 $scope.data1 数据,以便通过路由加载时,我可能会在其他页面上访问相同的内容。我该怎么做。

这是我的代码。

 commonApp.service('CommonServices',function($http){ 
 
            this.getData=function(urlreq){ 
 
                return $http({ 
                    method:"GET", 
                    url   :urlreq 
                }); 
            }; 
commonApp.controller('Controller1',function($scope,CommonServices,toaster){ 
           CommonServices.getData('dataurl1').success(function(getResponse){ 
 
                 $scope.data1=getResponse.success;   
 
           }; 
} 
commonApp.controller('Controller2',function($scope,CommonServices,toaster){ 
 
 
                 $scope.data2= ????;     
//i want my $scope.data1 in $scop.data2.  
 
 
} 
 
 
 
 
    }); 

请您参考如下方法:

我相信您正在寻找这样的东西,您在其中使用相同的公共(public)服务来存储一段数据,该数据可以由有权访问该服务的任何 Controller 获取:

commonApp.service('CommonServices', function ($http) { 
    this.shared = null;  // this is where the shared data would go 
 
    this.getData = function (urlreq) { 
        return $http({ 
            method: "GET", 
            url: urlreq 
        }); 
    }; 
 
    this.setSharedData = function (data) { // this sets the value of the shared data 
        this.shared = data; 
    }; 
 
    this.getSharedData = function () { // this retrieves the shared data 
        return this.shared; 
    } 
}); 
 
commonApp.controller('Controller1', function ($scope, CommonServices, toaster) { 
    CommonServices.getData('dataurl1').success(function (getResponse) { 
        $scope.data1 = getResponse.success; 
        CommonServices.setSharedData($scope.data1); 
 
        // CommonServices.shared = $scope.data1; // this would also work 
    }); 
}); 
 
commonApp.controller('Controller2', function ($scope, CommonServices, toaster) { 
    $scope.data2 = CommonServices.getSharedData(); 
 
    // $scope.data2 = CommonServices.shared;  // this would also work 
}); 

我基于您自己的示例代码,但我可能会采用不同的结构。但它提出了基本观点,我认为您的实际需求要复杂一些。

请注意,您不需要在服务中使用 setter 和 getter,但根据添加空值检查和覆盖现有值等内容的需要,这可能是有意义的。您会在评论中看到我提供了一个示例,说明您如何在没有设置和获取功能的情况下直接操作服务的属性。

希望这对您有所帮助,并且不要忘记投票并选择一个可接受的答案。


标签:ajax
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号