一个选项
如果你愿意搬到uiRouter,这是一种常见的模式。
复制和直接从uiRouter FAQ
https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-open-a-dialogmodal-at-a-certain-state
$stateProvider.state("items.add", {
url: "/add",
onEnter: ['$stateParams', '$state', '$modal', '$resource', function($stateParams, $state, $modal, $resource) {
$modal.open({
templateUrl: "items/add",
resolve: {
item: function() { new Item(123).get(); }
},
controller: ['$scope', 'item', function($scope, item) {
$scope.dismiss = function() {
$scope.$dismiss();
};
$scope.save = function() {
item.update().then(function() {
$scope.$close(true);
});
};
}]
}).result.then(function(result) {
if (result) {
return $state.transitionTo("items");
}
});
}]
})
第二个选项
第二个选项将启动模式控制器的构造函数粘贴。我已经包含了一个modalFactory。这是一种常见的模式。它允许你的模块可重用,并清理你的控制器。上面的uiRouter示例也应该使用工厂模式,以便从状态配置中抽取模式设置。
这个例子应该与ngRouter一起工作。
app.controller('addJobModalController', ['modalFactory', function(modalFactory) {
modalFactory.addJob();
}]);
app.factory('modalFactory', ['$modal', function($modal) {
return {
addJob: function() {
return $modal.open({
templateUrl: 'views/addjob-modal.html',
controller: 'AddJobController',
size: 'md'
});
}
}
}]);
addJob()方法返回模态的承诺。如果你愿意,你可以将这个承诺存储在工厂中,由另一种方法返回,以便另一个控制器或服务可以根据模式的结果采取行动。
我没有使用uiRouter,我使用的是默认的ngRoute – 2014-10-09 08:37:21
我更新了答案,添加了一个更通用的解决方案,如果移动到uiRouter不是一个选项。 – Martin 2014-10-09 09:56:48