从服务中打开$ modal并将变量传递给控制器

时间:2014-12-31 12:12:31

标签: angularjs

我为$modal.实现自己的包装器而不是在controller中打开它我想在service中执行此操作,然后将此服务注入其他组件

mainApp.factory('modalsService', ['$modal', function($modal) {
    return {
        show: function(text) {
            var modalInstance = $modal.open({
                templateUrl: "modals/modal-template.html",
                controller: "modalCtrl",
                resolve: function() {
                    return text
                }
            });
        }
    }
}])

mainApp.controller('modalCtrl', ['$scope', '$modalInstance', 'text',
    function ($scope, $modalInstance, text) {
        alert(text)
        $scope.msg = text
        $scope.confirm = function() {
            $modalInstance.close()
        }
}])

我的问题在alert(text) - 它打印“未定义”。由于某种原因,我无法将此文本从服务传递给控制器​​。

你可以帮帮我吗?

2 个答案:

答案 0 :(得分:1)

您的代码应该是:

mainApp.controller('Ctrl',
    function ($scope,modalsService ) {

        var text = 'your message'
        $scope.openModel = function() {
            modalsService.show(text)
        }
});

并且,将modalCtrl更改为,

mainApp.controller('modalCtrl', ['$scope','$modalInstance','text',
    function ($scope, $modalInstance, text) {
        alert(text)
        $scope.msg = text
        $scope.confirm = function() {
            $modalInstance.close()
        }
}])

答案 1 :(得分:1)

您需要修复resolve部分服务:

var modalInstance = $modal.open({
    templateUrl: "modals/modal-template.html",
    controller: "modalCtrl",
    resolve: {
        text: function() {
            return text;
        }
    }
});

请注意您是如何明确告诉您希望控制器注入text

然后你可以在任何这样的控制器中使用它:

modalsService.show('This is a text');

演示:http://plnkr.co/edit/FSMV0AvSykrpemqwTNB9?p=preview