所以我有一个绑定到2个视图的控制器。在控制器中,我希望将范围变量设置为:
$scope.isOffset = false;
当路由另一个视图时,我希望它设置为true。我的app.js中的路线设置如下:
$routeProvider.when("/claimSub", {
controller: "claimsController",
templateUrl: "ppt/views/claims/claimSub.html"
});
$routeProvider.when("/offsetSwipe", {
controller: "claimsController",
templateUrl: "ppt/views/swipes/offsetSwipe.html"
});
这两个视图的输入都绑定到范围:
$scope.claimInfo = {
id: "",
benefitId: "",
isSecIns: "",
isNoResid: "",
expenseTypeId: "",
fromDate: "",
toDate: "",
provider: "",
who: "",
depId: "",
age: "",
amount: "",
comments: "",
isOffset: "",
};
因此,确保上面显示的第二条路线,这就是“消息”。是一样的。
我没有使用过stateProvider,但不确定这是否适用于此,因为一个视图不是另一个视图的子集。
所以想弄清楚我能在这做什么?在我看来,但我无法弄清楚如何,最好的路线是改变路由并为app.js添加某种变量或setter,以便我希望该变量设置为true。
答案 0 :(得分:3)
当路由器更改视图时,销毁控制器及其销毁其范围。然后,它会创建新范围并实例化新控制器。即使新控制器与旧控制器相同,它也会这样做。
要根据路线设置变量,请在路线中添加一个解析函数:
$routeProvider.when("/claimSub", {
controller: "claimsController",
templateUrl: "ppt/views/claims/claimSub.html",
resolve: { isOffset: function() { return false } }
});
$routeProvider.when("/offsetSwipe", {
controller: "claimsController",
templateUrl: "ppt/views/swipes/offsetSwipe.html",
resolve: { isOffset: function() { return true } }
});
然后当您的控制器在新视图中启动时:
$scope.isOffset = $scope.$resolve.isOffset;
答案 1 :(得分:2)
“claimsController”控制器实例化两次,一次用于claimSub
视图,另一次用于offsetSwipe
视图。
如果您需要在两个视图(路线)之间共享数据,您可以使用 here 进行操作,或者如果您想分享范围您必须添加父控制器(例如“mainController”到包装所有视图的元素。)
例如,使用附加到ng-controller="mainController"
的{{1}}并在此控制器中设置您需要在两个视图之间共享的变量。如果您需要知道状态(视图)更改何时使用<body>
。
答案 2 :(得分:1)
您可以尝试使用$location.path()
获取当前页面,然后相应地设置isOffset
$scope.isOffset = currentPage === 'claimSub';