设置路线时角度范围变量会发生变化吗?

时间:2016-01-26 07:26:08

标签: javascript angularjs routes

所以我有一个绑定到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。

3 个答案:

答案 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';

相关问题