在控制器相同的2条路线之间共享$ scope

时间:2017-04-04 13:50:47

标签: angularjs

如下所示,即使我使用相同的控制器,我也希望在2 html之间共享范围。

是否可以在routeProvider中配置它?

.when('/cform', {
        templateUrl: '/partials/clientForm.html',
        controller: 'ClientCtrl', //Same Controller
   })
   .when('/vwClientManagement', {
        templateUrl: '/partials/clientManagement.html',
        controller: 'ClientCtrl' //Same Controller
   })


$scope.showClientAddUpdateView = function(action,clientId) {
    $scope.client.name="Hello World"; // This is getting displayed in UI.
        $http.get("/qCli", { params:{id : clientId}}).then(
            function successCallback(response){
                //$scope.client = response.data;
                $scope.client.name="Hello World After Ajax"; // This is not getting displayed in UI.
                $location.path('/cform');
            },function errorCallback(response){
                console.log("err searching clients");
            }
        );
};

更新: Scanario 1 - 在ajax成功回调中更改路由和设置范围,仅丢失我在路由更改后成功回调中设置的值

Scanario 2 - 更新ajax成功回调中的范围,但不更改路径,使用正确的值更新视图。

添加了更多详情More Details

2 个答案:

答案 0 :(得分:1)

在我看来,最好使用Service,在Angular控制器之间共享数据。通常,angularjs非常灵活,至少有几种方法可以解决您的问题:使用服务,使用$state.go服务,使用stateparams,使用rootscope ...

检查此问题,有许多相关且有用的建议:Share data between AngularJS controllers

答案 1 :(得分:0)

使用时:

.when('/cform', {
    templateUrl: '/partials/clientForm.html',
    controller: 'ClientCtrl', //Same Controller
}).when('/vwClientManagement', {
    templateUrl: '/partials/clientManagement.html',
    controller: 'ClientCtrl' //Same Controller
})

使用一个唯一控制器。您正在为每个视图创建ClientCtrl实例

所以他们没有共享范围,每个范围都有不同且独立的范围。

您似乎正在尝试避免使用服务,而在这种情况下最好这样做。 Stack Overflow上有几个(12)答案处理这个主题。