当我从服务中接受承诺时,我试图关闭模式,我无法弄明白:这会导致无法读取未定义的'属性值#39; ....
更改一个plunker的代码,我从angular.iu网站上取了这个plunker,并添加了dismiss行,你可以看到那里的错误
检查控制台
答案 0 :(得分:2)
dismiss()
。您正在看到的错误发生在ui-bootstrap中,它正在尝试在其内部集合中找到已打开的模态,但它还没有在那里。
open()
返回在模态完成打开时解析的承诺...
var modalInstance = $modal.open({ /* ... */ });
modalInstance.opened.then(function () {
modalInstance.dismiss('dismiss');
});
答案 1 :(得分:0)
在角度1.6中,如果你没有正确处理关闭,你会得到一个错误,如“可能未处理的拒绝:未定义”。 $ uibModal.open返回一个promise,如果没有显式定义回调,则会在控制台中弹出错误。在您的情况下,您可能希望在呼叫服务或控制器中正确处理关闭。例如,如果您有一个发出事件的按钮而另一个控制器有一个监听器,那么该监听器应该监视该事件。这是你应该做的:
在模态服务中:
.service('serviceModalName', function ($uibModal) {
this.open = function () {
var modalInstance = $uibModal.open({
templateUrl: '',
controller: 'serviceNameController'
});
};
modal.result.then(function () {
modal.dismiss();
}, angular.noop);
});
在你的其他控制器(在你的应用程序中),再次,我假设模态服务的控制器,其中注入$ uibModalInstance,不会调用关闭或解除功能。相反可以发出一个事件。
.controller('modalController', function ($scope) {
$scope.close = function () {
$scope.$emit('modal.closed.somewhere');
}
});
.controller('someOtherController', function ($scope, serviceModalName) {
var modalService = serviceModalName.open();
$scope.$on('modal.closed.somewhere', function (e, args) {
if (modalService) {
modalService.opened.then(function () {
modalService.close();
}, angular.noop);
}
};
});