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

Angularjs 在控制器相同的2条路由之间共享$scope,angularjs,Angularjs,如下所示,尽管我有两个不同的html,但我使用的是同一个控制器,所以我希望在两个html之间共享作用域 是否可以在routeProvider中对此进行配置 .when('/cform', { templateUrl: '/partials/clientForm.html', controller: 'ClientCtrl', //Same Controller }) .when('/vwClientManagement', { temp

如下所示,尽管我有两个不同的html,但我使用的是同一个控制器,所以我希望在两个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成功回调中更新作用域,但不更改路由,视图将使用正确的值进行更新


添加了更多细节

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

检查此问题,有一系列相关和有用的建议:

使用此选项时:

.when('/cform', {
    templateUrl: '/partials/clientForm.html',
    controller: 'ClientCtrl', //Same Controller
}).when('/vwClientManagement', {
    templateUrl: '/partials/clientManagement.html',
    controller: 'ClientCtrl' //Same Controller
})
您使用的是一个唯一的控制器。您正在为每个视图创建
ClientCtrl
实例

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


似乎您正在试图避免使用服务,而在这种情况下,最好是这样做。关于堆栈溢出,有几个(,)答案涉及这个主题。

“我想共享范围…”
。。您应该使用
服务
进行同样的操作。否则,您将遇到问题。因为
控制器在更改路由时被释放。数据将被重置服务与范围无关。不,你错了,它们不会被处理,我只对多个路由使用单个控制器,但是即使我更改了路由,范围变量仍然是共享的。每次我更改路由并返回到相同的旧路由时,我都必须清除scope变量以清除表单的值。如果您使用的是未使用的
state
base routing(
ui router
),那就可以了。谢谢我读了这篇文章,我可以看到在ajax调用之前设置的值,但看不到在ajax调用的成功回调时设置的值。根据路由后您共享的链接,它不应该显示控制器中设置的任何值,因为它是一个新实例。如果是这样的话,为什么我在ajax调用之前在score中设置的内容在路由后显示在视图中!!!我还尝试使用将promise对象返回给控制器的服务。这对我也不起作用。