angular 模态服务错误
angular modal service error
我的单页应用程序有 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;
};
}]);
由于您使用 UI Bootstrap
,您需要更正以下内容:
将 'ui.bootstrap'
作为模块注入,例如 angular.module('app', ['ui.bootstrap']);
将$modal
改为'$uibModal'
- 从
HTML
你需要调用 controller $scope function
来显示模态弹出窗口。所以在控制器中创建方法。
- 从控制器中删除
$scope
,它不能注入服务,只能通过函数参数传递。
这是您的代码的演示 fiddle。
进一步阅读 Doc. and go through doc plunker。
我的单页应用程序有 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;
};
}]);
由于您使用 UI Bootstrap
,您需要更正以下内容:
将
'ui.bootstrap'
作为模块注入,例如angular.module('app', ['ui.bootstrap']);
将
$modal
改为'$uibModal'
- 从
HTML
你需要调用controller $scope function
来显示模态弹出窗口。所以在控制器中创建方法。 - 从控制器中删除
$scope
,它不能注入服务,只能通过函数参数传递。
这是您的代码的演示 fiddle。
进一步阅读 Doc. and go through doc plunker。