在我的应用程序中发现用户未登录后我想打开一个模态对话框:
.when('/showtask/:id', {templateUrl: 'Home/Template/showtask', resolve: ShowTaskCtrl.resolve, access: { allowAnonymous: false },
resolve: {
userAuthenticated: ["$http", "$q", function ($http, $q) {
var deferred = $q.defer();
$http.get('/api/Authentication/UserAuthenticated').then(function (data) {
if (data.data != "null") {
deferred.resolve(data.data);
}
else {
var modalInstance = {
templateUrl: 'Home/Template/loginfailed',
controller: 'ModalInstanceCtrl',
modalpart: ['modalpart', function (modalpart) {
return modalInstance;
}]
};
$modal.open(modalInstance);
deferred.reject();
}
});
return deferred.promise;
}]
}
由于它发生在路由更改上,我必须在实例中注入一个modalpart并在控制器中检索它。
var ModalInstanceCtrl = WorkerApp.controller('ModalInstanceCtrl', ["$scope", "modalpart", function ($scope, modalpart) {
但我一直收到这个错误:
未知提供者:modalpartProvider< - modalpart
我该如何解决这个问题?
P.S。我正在查看的原始代码在这里:http://angular-ui.github.io/bootstrap/(在模态下)
答案 0 :(得分:9)
这个问题也有一段时间了。虽然您没有发布HTML,但这就是我的问题所在。确保你没有在你的DOM中命名控制器,这已经在$ modal.open()中为你处理了。
答案 1 :(得分:8)
我从来没有像你正在做的那样在路由更改中使用$modal
服务,所以不确定它是如何工作的。然而,仅仅查看您的$modal
代码看起来是错误的。正确的方法应该是:
var modalOptions = {
templateUrl: 'Home/Template/loginfailed',
controller: 'ModalInstanceCtrl'
};
$modal.open(modalOptions);
然后你的控制器定义:
WorkerApp.controller('ModalInstanceCtrl',
["$scope", "$modalInstance", function ($scope, $modalInstance) {
// Do your stuff
}]);
根据documentation,$modal
服务会自动处理向您的控制器注入$modalInstance
。
答案 2 :(得分:2)
我有同样的问题,我发现我注册的控制器运行了两次! 感谢@compguy,我删除了模板中的控制器名称。 我成功了!