设置路由时,角度范围变量会发生变化

Angular scope variable change when route is set?

本文关键字:变量 变化 范围 路由 设置      更新时间:2023-09-26

所以我有一个绑定到 2 个视图的控制器。在控制器中,我希望将范围变量设置为:

$scope.isOffset = false;

当路由另一个视图时,我希望它设置为 true。我的应用程序中的路线.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: "",
};

因此,请确保上面显示的第二条路线,这个"isOffset"是相同的。

我没有使用状态提供程序,但不确定这是否适用于这里,因为一个视图不是另一个视图的子集。

所以试图弄清楚我能在这里做什么?在我看来,但我无法弄清楚如何,最好的方法是更改路由并向应用程序添加某种变量或 setter.js对于我希望该变量设置为 true 的视图。

当路由器更改视图时,它会破坏控制器并破坏其范围。然后,它会创建一个新作用域并实例化新的控制器。即使新控制器与旧控制器相同,它也会执行此操作。

要根据路由设置变量,请在路由中放置一个解析函数:

$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;

"claimController"控制器实例化两次,一次用于claimSub视图,另一次用于offsetSwipe视图。

如果需要在两个视图(路由)之间共享数据,则可以使用服务执行此操作,或者如果要共享范围,则必须添加父控制器(例如,将"mainController"添加到包装所有视图的元素中)。

例如,使用附加到<body>ng-controller="mainController",并在此控制器中设置需要在两个视图之间共享的变量。如果您需要知道状态(视图)何时更改,请使用$rootScope.$on( "$routeChangeSuccess", ... )

您可以尝试使用 $location.path() 获取当前页面,然后可以相应地设置isOffset $scope.isOffset = currentPage === 'claimSub';