我的个人资料编辑页面有一个主控制器,用户可以在模式窗口中添加他们的教育。模态有它自己的控制器。用户可以添加他们想要的任意数量的教育项目,他们可以修改现有的教育项目。
现在我的问题。我希望模态控制器能够处理添加新项目和更新现有项目。不同之处在于,在更新时,控制器应该接收一个完全填充的education
对象,它应该更新。我不知道如何将此对象从主控制器传递给模态控制器。我已经看到了一些通过服务在控制器之间传递数据的方法,但这看起来太麻烦了,在这种特殊情况下使用服务对我没有意义。
我的主控制器创建了这样的模态:
vm.openEducation = function(){
$modal.open({
templateUrl: "some.html",
controller: "SomeController",
controllerAs: "vm",
size: 'lg'
}).result.then(function (education) {
vm.educations.push(education);
});
}
子控制器(目前只支持插入,因此vm.education
的空init):
function SomeController($scope){
var vm = this;
vm.education = {}; // or get from parent controller
vm.save = function () {
$scope.$close(vm.education);
};
vm.close = function () {
$scope.$dismiss();
}
return vm;
}
答案 0 :(得分:2)
您可以使用$rootScope.$broadcast
从模式发送数据,然后$scope.$on
在其他地方接收数据。
例如:
// in your modal
$rootScope.$broadcast('education:updated', yourDataObj)
// in your controller
$scope.$on('education:updated', function(e, data) {
console.log(data)
})
请注意,$broadcast
将会被任何正在收听的内容选中,因此,如果您有多个控制器实例,则会收到多条console.log
条消息