我通过路由将控制器绑定到我的视图。
App.js中的示例我有以下内容:
when('/about', { templateUrl: 'views/about.html', controller: 'appAboutCtrl' }).
我有另一个控制器用于Modal特定操作。我需要这个,因为它是一个跨页面应用的登录操作,因此,它是自己的控制器而不是在每个控制器中重复登录功能。
我的模态执行它应该做的事情,但是当我关闭它时,我需要它来更新页面上的$ scope以显示/隐藏项目,方法是设置类似于:
$scope.isLoggedIn = true;
但是,范围未更新。我在这里看到过类似的内容:https://github.com/angular-ui/bootstrap/issues/2110#issuecomment-54551321但是考虑到我登录的复杂性,我需要它在自己的控制器中......控制器驱动我的视图。
这是调用我的Modal和控制器特定模式的控制器绑定到我打开它的视图(about.html和appAboutCtrl):
// Open Modal for Login
$scope.login = function () {
var modalInstance = $modal.open({
templateUrl: 'templates/login.html',
controller: 'appLoginCtrl',
size: 'lg'
});
}
这是我尝试在appLoginCtrl中设置模态关闭的范围:
$scope.ok = function () {
$modalInstance.close();
$scope.isLoggedIn = true;
};
$scope.cancel = function () {
$modalInstance.dismiss('cancel');
$scope.isLoggedIn = true;
};
我可以在模态关闭时重新加载视图,但不能按如下方式设置$ scope:
$scope.ok = function () {
$modalInstance.close();
$route.reload();
};
$scope.cancel = function () {
$modalInstance.dismiss('cancel');
$route.reload();
};
如何在Modal上设置$ scope关闭,这样当我关闭模态时,我的视图会记录更改?我的$ scope与ng-show相关联,以便在登录时显示/隐藏项目。
答案 0 :(得分:2)
您可以使用resolve选项绑定变量。
var modalInstance = $modal.open({
templateUrl: 'templates/login.html',
controller: 'appLoginCtrl',
size: 'lg'
resolve: {
isLoggedIn: function () {
return $scope.isLoggedIn;
}
}
});
或者您可以将父控制器的范围传递给模态范围
var modalInstance = $modal.open({
templateUrl: 'templates/login.html',
controller: 'appLoginCtrl',
size: 'lg',
scope: $scope
});