Angularjs 控制器中的变量不会随着agularjs中服务中的变量的更改而更新

Angularjs 控制器中的变量不会随着agularjs中服务中的变量的更改而更新,angularjs,Angularjs,这里是新手 我有以下服务: 该控制器: 我的逻辑是: getGroup函数从web API获取数据并更新服务中的变量组 $scope.group被分配给service.list函数返回的数据 数据正从web API正确返回,但其余部分存在问题 未更新变量$scope.group 如何解决此问题?您需要在成功方法中分配从API返回的数据。在顶部为$scope.group执行的第一次分配仅在控制器第一次运行时执行。以后不会更新$scope.group的内容 关于服务:当您希望在应用程序中共享数据时,

这里是新手

我有以下服务:

该控制器:

我的逻辑是:

getGroup函数从web API获取数据并更新服务中的变量组 $scope.group被分配给service.list函数返回的数据 数据正从web API正确返回,但其余部分存在问题

未更新变量$scope.group


如何解决此问题?

您需要在成功方法中分配从API返回的数据。在顶部为$scope.group执行的第一次分配仅在控制器第一次运行时执行。以后不会更新$scope.group的内容


关于服务:当您希望在应用程序中共享数据时,通常使用服务。在您的情况下,如果希望检索这些组一次,然后将服务注入多个控制器,并使这些数据可用。

您可以使用$watch查看服务方法


当您在服务中分配新值时,您似乎正在更改对该值的引用。要使代码正常工作,您应该将组变量转换为对象:

app.service('GroupPageService', function () {
    var group = {name: "xxx"} ;

    this.list = function () {
          return group;
      };

    this.update = function (new_group) {
          group.name = new_group;
    };
});

在使用手表时,值得记住的一点是,每个摘要周期都会对手表进行评估。也就是说,如果你真的需要介绍一块手表的话,在你做这件事之前值得考虑一下。现在唯一适合我的是$watch。谢谢你的回答。但是我必须删除第三个参数true,因为它在最初的runCool中不起作用,但是您不必担心这里的性能。按循环进行的一个基本比较不算什么:关于服务,你是对的。我有另一个控制器将使用来自服务的数据。我执行$scope.group=GroupPageService.list的原因;因为,在第二个控制器中,我将更新服务中变量组的值,并且我希望第一个控制器中的$scope.group也立即更新。有没有办法做到这一点?一个可能的解决方案是引发一个数据已更改的事件。我建议看一下以下教程:
angular.module('autotestApp').controller('GroupPageController', function ($scope, $http, $routeParams, GroupService, $modal, GroupPageService) {

    $scope.groupId = $routeParams.id;
    $scope.group = GroupPageService.list();

    var getGroup = function (id) {
        $http({
            method: "get",
            url: "/enterprises/_groups/"+id
        }).success(function (response) {
            GroupPageService.update(response.group);
        }).error(function () {
            console.log("Error while fetching data of one particular group")
        });
    };

    getGroup($scope.groupId);
}
            $scope.$watch(function() {
                return GroupPageService.list();
            }, function(newValue, oldValue) {
                if (newValue !== oldValue) {
                     $scope.group = GroupPageService.list();
                }
            }, true);
app.service('GroupPageService', function () {
    var group = {name: "xxx"} ;

    this.list = function () {
          return group;
      };

    this.update = function (new_group) {
          group.name = new_group;
    };
});