将数据传递给子控制器以进行插入或更新

时间:2016-02-11 16:25:40

标签: angularjs

我的个人资料编辑页面有一个主控制器,用户可以在模式窗口中添加他们的教育。模态有它自己的控制器。用户可以添加他们想要的任意数量的教育项目,他们可以修改现有的教育项目。

现在我的问题。我希望模态控制器能够处理添加新项目和更新现有项目。不同之处在于,在更新时,控制器应该接收一个完全填充的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;
}

1 个答案:

答案 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条消息