Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 从其他控制器更新ng repeat中使用的$scope变量_Angularjs_Controller_Angularjs Scope_Ng Repeat - Fatal编程技术网

Angularjs 从其他控制器更新ng repeat中使用的$scope变量

Angularjs 从其他控制器更新ng repeat中使用的$scope变量,angularjs,controller,angularjs-scope,ng-repeat,Angularjs,Controller,Angularjs Scope,Ng Repeat,我有一个控制器HomeworkPageController,在这里我使用TopicService中的getAllMainTopics方法从MongoDB获取所有主题$然后使用scope.topics显示所有主题。我有一个按钮可以打开一个模式,其中一个新主题是add-in MongoDB。模态正在使用另一个控制器AddTopicController。如何从AddTopicController中的HomeworkPageController更新$scope.topics?我想这样做是因为在我关闭模式

我有一个控制器HomeworkPageController,在这里我使用TopicService中的getAllMainTopics方法从MongoDB获取所有主题$然后使用scope.topics显示所有主题。我有一个按钮可以打开一个模式,其中一个新主题是add-in MongoDB。模态正在使用另一个控制器AddTopicController。如何从AddTopicController中的HomeworkPageController更新$scope.topics?我想这样做是因为在我关闭模式后,所有主题的列表都应该刷新,它必须包含已添加的主题。我尝试在AddTopicController中使用HomeworkPageController,然后调用方法getAllMainTopics,但是html中的$scope.topics没有更新。谢谢

以下是HomeworkPageController:

app.controller('HomeworkPageController', ['$scope','TopicService',
 function ($scope, TopicService) {
     $scope.topics = [];
        $scope.getAllMainTopics = function () {
            TopicService.getAllMainTopics('homework')
                .success(function(data) {
                    $scope.topics = data;
        }
        $scope.addTopic = function () {
           ModalService.openModal({
              template: "templates/addTopic.html",
              controller: 'AddTopicController'
           });
      } 
]);
app.controller('AddTopicController', ['$scope','$controller', '$timeout','TopicService', '$modalInstance',
    function ($scope, $controller, $timeout,TopicService, $modalInstance) {
      var homeworkPageController = $scope.$new();
        $controller('HomeworkPageController',{$scope : homeworkPageController });
        $scope.save = function() {
            TopicService.saveTopic(data)
                .success(function(result){
                    homeworkPageController.getAllMainTopics();
                    $modalInstance.close();
                })   
     }
}]);
以下是AddTopicController:

app.controller('HomeworkPageController', ['$scope','TopicService',
 function ($scope, TopicService) {
     $scope.topics = [];
        $scope.getAllMainTopics = function () {
            TopicService.getAllMainTopics('homework')
                .success(function(data) {
                    $scope.topics = data;
        }
        $scope.addTopic = function () {
           ModalService.openModal({
              template: "templates/addTopic.html",
              controller: 'AddTopicController'
           });
      } 
]);
app.controller('AddTopicController', ['$scope','$controller', '$timeout','TopicService', '$modalInstance',
    function ($scope, $controller, $timeout,TopicService, $modalInstance) {
      var homeworkPageController = $scope.$new();
        $controller('HomeworkPageController',{$scope : homeworkPageController });
        $scope.save = function() {
            TopicService.saveTopic(data)
                .success(function(result){
                    homeworkPageController.getAllMainTopics();
                    $modalInstance.close();
                })   
     }
}]);
以下是我使用$scope.topics的视图:

 <div class="homework-content-topic-list" ng-repeat="topic in topics">
    <label> {{ topic.subject }} </label>
 </div

{{topic.subject}}

您可能应该将主题列表保留在服务中,然后将该服务注入两个控制器。这样,您就可以访问和更新两个控制器中的主题。它可能看起来像

app.controller('HomeworkPageController', ['$scope','TopicService',
function ($scope, TopicService) {
 $scope.topics = TopicService.topics;
 // Do stuff here
]);

然后,您只需要修改TopicService,使其方法在存储对象上工作。

您可以通过两种方法解决此问题

1) 请看ui引导中给出的示例。他们给出了一个符合您要求的示例-。模式中有三个项目-项目1、项目2、项目3。如果选择其中一个项目并单击“确定”,则所选项目将通过$scope.open函数中的“resolve”属性发送到主控制器

2) 您可以编写一个充当两个控制器之间桥梁的自定义服务,并且可以在该服务中编写getter和setter方法

angular.module('app').service('popupPageService', function() {

    var topics;

    var setDetails = function(param) {
        topics = param;
    };

    var getDetails = function() {
        return topics;
    };

    return {
        setDetails: setDetails,
        getDetails: getDetails,
    };
});
在AddTopicController中调用setDetails函数,一旦退出模式,通过推送新的附加值(getDetails)更新HomeworkPageController中的$scope.topics