Angularjs Nav未更新$scope更改

Angularjs Nav未更新$scope更改,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我的Angular应用程序中有一个内容控制器和一个标题控制器。内容控制器能够将项目添加到对象数组中。标题控制器将这些项目放入导航中 加载时,header controller成功地从数据库加载现有项,并将其添加到全局范围,然后由于ng重复,它们显示在nav中 内容控制器将新项目添加到全局范围时,尽管它没有反映在标题中。我可以注销全局范围的内容,新项目就在那里,它只是不想显示在dom中。使用$apply()似乎没有任何区别 以下是两个控制器: 校长: angular.module('system'

我的Angular应用程序中有一个内容控制器和一个标题控制器。内容控制器能够将项目添加到对象数组中。标题控制器将这些项目放入导航中

加载时,header controller成功地从数据库加载现有项,并将其添加到全局范围,然后由于ng重复,它们显示在nav中

内容控制器将新项目添加到全局范围时,尽管它没有反映在标题中。我可以注销全局范围的内容,新项目就在那里,它只是不想显示在dom中。使用$apply()似乎没有任何区别

以下是两个控制器:

校长:

angular.module('system').controller('HeaderController', ['$scope', 'Global', 'Lists', function ($scope, Global, Lists) {
$scope.global = Global;
    $scope.find = function() {
        Lists.query(function(lists) {
            $scope.global.lists = lists;
        });
    };
}]);
ContentCtrl:

angular.module('lists').controller('ListsController', ['$scope', '$routeParams', '$location', '$http', 'Global', 'Lists', function ($scope, $routeParams, $location, $http, Global, Lists) {
    $scope.global = Global;

    $scope.create = function() {
        var list = new Lists({
            name: this.name,
        });

        list.$save(function(response) {
            $location.path('lists/' + response._id);
            $scope.global.lists.push(response);
        });
    };
}]);

就像我说的,来自Header Controller的控制台日志显示新项存在于$scope.global.lists中,但它不会反映在DOM中。有什么想法吗?

在更新其他控制器时,使用
$rootScope
事件并在标题中捕捉它:

//main ctrl
$rootScope.$broadcast("updateHeader", someInfoToSend);


//header ctrl
$scope.$on("updateHeader", function(e, someInfoReceived){
  // do the necessary updates here
});

导致问题的原因是现有项和新添加的项之间存在小的数据不匹配

数据库中的项的属性为

owner:  {
    "_id" : "213876512461"
}
而添加新项返回的数据

owner: "213876512461"
因此,ng hide指令错误地隐藏了新添加的项


我已经标记了ruedamanuel的答案,因为我最终使用了他的$broadcast方法,让主控制器更新标题控制器中的$scope.list,而不需要使用$rootScope或全局变量。

为什么有两个独立的模块?是否可以包含相关的html(包含<代码> NG重复< /代码>的位?它们是2个独立的模块,因为我使用平均堆栈作为项目的基础。将来我可能合并2,但目前它使事情变得更简洁,没有太多的功能重叠。