角度模态服务错误

时间:2017-06-07 06:37:09

标签: angularjs service modal-dialog angular-ui-bootstrap

我的单页应用6模态非常复杂。目前我已经使用控制器制作了ui-bootstrap风格,但我不认为这是最好的方式,因为控制器一遍又一遍地使用相同的代码。

我决定尝试将其重新编写为服务,但它不起作用,并且在jsfiddle中没有显示任何错误。请帮我完成这种模态服务。

app.service('modalService', ['$modal',
    function ($modal) {

        var modalDefaults = {
            backdrop: true,
            keyboard: true,
            modalFade: true,
            templateUrl: '/app/partials/modal.html'
        };

        var modalOptions = {
            closeButtonText: 'Close',
            actionButtonText: 'OK',
            headerText: 'Proceed?',
            bodyText: 'Perform this action?'
        };

        this.showModal = function (customModalDefaults, customModalOptions) {
            if (!customModalDefaults) customModalDefaults = {};
            customModalDefaults.backdrop = 'static';
            return this.show(customModalDefaults, customModalOptions);
        };

        this.show = function (customModalDefaults, customModalOptions) {
            //Create temp objects to work with since we're in a singleton service
            var tempModalDefaults = {};
            var tempModalOptions = {};

            //Map angular-ui modal custom defaults to modal defaults defined in service
            angular.extend(tempModalDefaults, modalDefaults, customModalDefaults);

            //Map modal.html $scope custom properties to defaults defined in service
            angular.extend(tempModalOptions, modalOptions, customModalOptions);

            if (!tempModalDefaults.controller) {
                tempModalDefaults.controller = function ($scope, $modalInstance) {
                    $scope.modalOptions = tempModalOptions;
                    $scope.modalOptions.ok = function (result) {
                        $modalInstance.close(result);
                    };
                    $scope.modalOptions.close = function (result) {
                        $modalInstance.dismiss('cancel');
                    };
                }
            }

            return $modal.open(tempModalDefaults).result;
        };

    }]);

http://jsfiddle.net/8MVLJ/3095/

1 个答案:

答案 0 :(得分:0)

由于您使用UI Bootstrap,因此您需要更正以下内容:

  1. 'ui.bootstrap'作为模块注入,例如angular.module('app', ['ui.bootstrap']);

  2. $modal更改为'$uibModal'

  3. HTML,你需要调用controller $scope function来显示模态弹出窗口。所以在控制器中创建方法。
  4. 从控制器中删除$scope无法注入进行维修,只通过功能参数传递。
  5. 以下是您的代码的演示fiddle

    进一步阅读Doc.并同时浏览doc plunker