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